Commit Graph

3522 Commits

Author SHA1 Message Date
Dave Borowitz 8ea4319388 Add a Merger.merge method that makes flushing optional
This allows callers performing multiple separate merges to reuse a
single ObjectInserter without flushing the inserter on each iteration
(which can be slow in the DFS case).

Change-Id: Icaff7d2bc2c20c873ce5a7d9af5002da84ae1c2b
2014-08-13 10:40:04 -07:00
Dave Borowitz 0ab3f43c85 Teach mergers to use ObjectInserter.newReader()
This allows the RecursiveMerger to iteratively create new merge bases
without necessarily flushing packs to storage in the DFS case;
flushing only need happen at the end of the whole merge process.

Since Merger's walk now depends on its inserter, we need to construct
an inserter at Merger construction time.  This should not be a
significant increase in overhead since unused inserters don't use any
resources (beyond a reference to the Repository).

We also must release and recreate the walk whenever setObjectInserter
is called, which can break usages where setObjectInserter is called in
the middle of stateful operations on the walk.  No usages of this
method within JGit currently do this; the inserter is only ever set
before any stateful walk operations happen.

Change-Id: I9682a6aa4a2c37dccef8e163f132ddb791d79103
2014-08-13 10:39:57 -07:00
Yuxuan 'fishy' Wang 38a24bc799 Tweak the handling of remote url in jgit repo.
This kind of reverted 31148. URI.resolve actually can handle the absolute URL
well, the problem is only the missing "/".

Change-Id: Iee5866c005cbc1430dc20ee7db321b8b51afed30
Signed-off-by: Yuxuan 'fishy' Wang <fishywang@google.com>
2014-08-13 10:36:56 -07:00
Dave Borowitz e1856dbf44 Add a method to ObjectInserter to read back inserted objects
In the DFS implementation, flushing an inserter writes a new pack to
the storage system and is potentially very slow, but was the only way
to ensure previously-inserted objects were available.  For some tasks,
like performing a series of three-way merges, the total size of all
inserted objects may be small enough to avoid flushing the in-memory
buffered data.

DfsOutputStream already provides a read method to read back from the
not-yet-flushed data, so use this to provide an ObjectReader in the
DFS case.

In the file-backed case, objects are written out loosely on the fly,
so the implementation can just return the existing WindowCursor.

Change-Id: I454fdfb88f4d215e31b7da2b2a069853b197b3dd
2014-08-13 10:27:12 -07:00
Shawn Pearce 63eb9042a4 DfsInserter: buffer up to streamFileThreshold from InputStream
Since 2badedcbe0 in-core merges can write up to 10 MiB
into a TemporaryBuffer.Heap strategy, where the data is stored
as a chain of byte[] blocks.

Support the inserter reading up to the streamFileThreshold (default 50
MiB) from the supplied input stream and hash the content to determine
if the merged result blob is already present in the repository.  This
allows the inserter to avoid creating duplicate objects in more cases,
reducing repository pack file churn.

Change-Id: I38967e2a0cff14c0a856cdb46a2c8fedbeb21ed5
2014-08-12 18:55:12 -07:00
Dave Borowitz fa5582f3fe Merger: clarify getBaseCommit javadoc
Change-Id: Ic52475248a545d51d3d8ac31a24f0344a1241e45
2014-08-11 14:46:45 -07:00
Dave Borowitz e06082c171 Reuse Merger's ObjectReader from ResolveMerger
The base Merger class already has a single ObjectReader instance that
it handles releasing as necessary, so creating new readers is not
necessary.

Change-Id: I990ec43af7df448c7825fc1b10e62eadaa3e0c2a
2014-08-11 14:46:31 -07:00
Robin Rosenberg 06ab442b05 Merge "Fix CheckoutCommand not setting up tracking" 2014-08-11 16:23:38 -04:00
Shawn Pearce 73a687fead Merge "Process most in-core merges without local temp files" 2014-08-11 12:42:10 -04:00
Robin Rosenberg b3cbd70684 Merge "Update tycho and signing plugins to latest versions" 2014-08-11 11:26:21 -04:00
Robin Rosenberg 2bf1368a65 Merge "Update maven plugins to latest versions" 2014-08-11 11:25:57 -04:00
Matthias Sohn 0933dbd4d5 Update tycho and signing plugins to latest versions
Change-Id: I3e8b3835b8ebbb8f0a2a9be42e6c16899cb3b993
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-08-11 10:49:30 -04:00
Matthias Sohn d0e80b2f69 Update maven plugins to latest versions
Also, remove unused findbugs exclude filter in java7 bundle since latest
findbugs plugins raises an error on this.

Change-Id: I791fc054596e7d9aa9f3cc8126eb0162539c57bf
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-08-11 10:48:59 -04:00
Robin Rosenberg f9e7296829 Merge "Remove redundant semicolon" 2014-08-10 04:22:08 -04:00
Robin Rosenberg c5d62caacb Merge "We should not warn for unqualifiedFieldAcces" 2014-08-10 04:21:55 -04:00
Robin Rosenberg bca12074b2 Replace deprecated method call in Java7 FTI test
Change-Id: I3bbb6da951765d79d77aa955edeac7b5e4da5d8a
2014-08-10 03:53:20 -04:00
Robin Rosenberg fb59b36967 We should not warn for unqualifiedFieldAcces
It does not make sense and I cannot explain why it slipped through.

Change-Id: I005a54cde545ea99553c0a2d6dd8d64e6e0a7611
2014-08-10 03:52:12 -04:00
Robin Rosenberg e90fefcd50 Remove redundant semicolon
Change-Id: I15370d7807c82ee85ed7fdb05061a4baf0a77a68
2014-08-10 03:47:15 -04:00
Shawn Pearce 2badedcbe0 Process most in-core merges without local temp files
Instead of always writing to disk use TemporaryBuffer.LocalFile to
store up to 10 MiB of merge result in RAM. Most source code will
fit into this limit, avoiding local disk IO for simple merges.

Larger files will automatically spool to a temporary file that
can be cleaned up in the finally, reducing the risk of leaving
them on disk and consuming space in /tmp.

Change-Id: Ieccbd9b354d4dd3d2bc1304857325ae7a9f34ec6
2014-08-08 17:53:49 -07:00
Matthias Sohn d87a2524da Merge "ResolveMerger: push result file creation into updateIndex()" 2014-08-08 18:34:47 -04:00
Shawn Pearce 2c33c725f9 ResolveMerger: push result file creation into updateIndex()
The only caller of writeMergedFile is updateIndex, and the only
user of this path object is the code within the method. This is
a no-op change that opens the door to refactoring the way temp
files are handled for inCore merges.

Change-Id: I863a303194689a806b667e55eb958e1decf046c1
2014-08-08 15:04:57 -07:00
Shawn Pearce 678a94fc66 Update Maven JAR plugins
Seems to fix the build stalls observed under some builds of the
Java 7 JRE.

Change-Id: I94d5e927b5b2ec3971e9a70c18966368a61ec14c
2014-08-08 11:32:15 -07:00
Shawn Pearce 4bd28bc958 RecursiveMerger: do not insert virtual commits into repository
When merging common ancestors to create a single virtual common
ancestor the commit does not need to be inserted into the Git
repository. Instead just mock it out in memory as part of the
merger's RevWalk pool.

Make the author and committer stable and predictable for any
given pair of merge bases. It is not necessary for the caller's
name or email to be used as the commit will not be written out.

Change-Id: I88d5ee4de121950e1b032a5c10486c9d2c42656c
2014-08-08 11:31:24 -07:00
Yuxuan 'fishy' Wang 66ad4237be Fix non-relative remote defined in manifest xml.
Currently if the remote defined in repo manifest xml is non-relative (e.g.
"https://chromium.googlesource.com"), our code will break. This change fixed
that.

It also makes that remotes are ending with "/".

Change-Id: Icef46360b32227a9db1d9bb9e6d929c72aeaa8df
Signed-off-by: Yuxuan 'fishy' Wang <fishywang@google.com>
2014-08-06 22:26:17 -07:00
Robin Stocker 544f65e655 Fix CheckoutCommand not setting up tracking
Instead of passing on the start point as is to CreateBranchCommand, the
resolved ObjectId was used. Given this, CreateBranchCommand did not set
up tracking.

This also fixes CreateBranchCommand with setStartPoint(null) to use HEAD
(instead of NPEing), as documented in the Javadoc.

Bug: 441153
Change-Id: I5ed82b4a4b4a32a81a7fa2854636b921bcb3d471
Signed-off-by: Robin Stocker <robin@nibor.org>
2014-08-05 23:38:07 +10:00
Matthias Sohn d846610035 Run unit tests in parallel
Configure Maven surefire plugin to run tests concurrently using
multiple processes. By default use one process per core available
on the machine running the tests.

Running this on my MacBook Pro i7 with 8 cores 16 GB RAM SSD
I get the following results:

forkCount   "mvn clean install" on org.eclipse.jgit.test
--------------------------------------------------------
1           02:36 min
2           01:26 min
4           00:56 min
6           00:49 min
8           00:49 min
10          00:51 min

When on-access scan of McAfee virus scanner is enabled the optimum
is at half the number of cores (4 of 8) on my MacBook.

Set system property "test-fork-count" to override the default.
Either set it to an absolute number e.g. "4" or in units of
cores available on the system running the build. E.g. "0.5C" to
use 4 cores on a 8 core system or "1C" to use all 8 cores on
a 8 core system.
E.g.
$ mvn clean install -Dtest-fork-count=0.5C
to use half the number of cores processes to run tests.

Change-Id: Ifdbd1ae8153f2033922eae6ae8942c36db1f9806
Signed-off-by: Sohn <matthias.sohn@sap.com>
2014-08-04 01:05:05 +02:00
Robin Rosenberg d97558fb1c Merge "Add isRebase to API of BranchConfig" 2014-08-03 07:33:28 -04:00
Robin Rosenberg b397e7b6e0 Merge "Use bitcheck to check for presence of OPT_FULL option" 2014-08-03 04:51:12 -04:00
Robin Stocker f5494c186f Add isRebase to API of BranchConfig
Change-Id: I9819f49410e30d32c2157db0556a0dd6a0bcc5a4
Signed-off-by: Robin Stocker <robin@nibor.org>
2014-08-03 18:38:38 +10:00
Alexey Kuznetsov a4f560551d NetRC parser and credentials provider.
Adds default git command line behaviour of reading credentials
for https connections from .netrc file.

Bug: 428229
Change-Id: I88699ca5da6a20bdeaed24b7e3899cc1022b8e7c
Signed-off-by: Alexey Kuznetsov <axet@me.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-08-03 01:47:43 +02:00
Robin Rosenberg c70a1f0af1 cleanup: Remove no-longer needed API compatibility warning filters
Change-Id: If534bd0aedaee6160679e965ad08ac30d5dac1c5
2014-08-03 00:22:06 +02:00
Kevin Sawicki d2fa3987a0 Use bitcheck to check for presence of OPT_FULL option
Previously an equality check was performed so an exception would
be thrown if any other options were set.

Change-Id: I36b60e2c0a8aef9fcfe663055dba520192996872
2014-08-02 18:20:11 -04:00
Robin Stocker 93530625cf Enhance BranchConfig API to expose branch.* options
With these, more code can use BranchConfig instead of directly accessing
the raw configuration values.

Change-Id: I4b52f97ff0e3fc8f097512806f043c615a3d2594
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-08-03 00:06:14 +02:00
Laurent Goubet 1fd150d565 Add IndexDiff tests for merge conflict state BOTH_ADDED
JGit handled this case improperly which these tests demonstrate. Fixed
by I25915880f304090fe90584c79bddf021231227a2.

Bug: 440537
Change-Id: Ia29c1d6cf8c0ce724cc3ff5ed9e0b396949b44bf
Signed-off-by: Laurent Goubet <laurent.goubet@obeo.fr>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-08-02 23:36:31 +02:00
Christian Halstrick ddbf67e058 IndexDiffFilter should never filter entries with stage!=0
If the IndexDiffFilter is asked whether it should include or filter out
a certain path and for that path there is a dircache entry with a stage
different from 0, then the filter should never filter out this entry.
IndexDiffFilter is an optimized version of AnyDiffFilter and there is no
case where the index contains non-0 stages but we still don't see any
diff for that path.

Change-Id: I25915880f304090fe90584c79bddf021231227a2
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-08-02 23:04:26 +02:00
Robin Rosenberg fd07ee54ef Merge "HistogramDiff: Convert stack recursion to heap managed queue" 2014-08-02 05:35:18 -04:00
Robin Stocker 66909cd7a6 Fix Javadoc errors with Java 8
Bug: 440414
Change-Id: Icce87bd23a3698513b76246677f1d45ddbcaab47
Signed-off-by: Robin Stocker <robin@nibor.org>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-08-02 00:47:13 +02:00
Christian Halstrick adbf0541dc Fix API errors raised on ResolveMerger affecting API providers only
In change If45bc3d078b3d3de87b758e71d7379059d709603 a new parameter was
added to 3 protected methods of ResolveMerger. This breaks the code of
developers which have subclassed ResolveMerger. The API baseline check
in Eclipse reports this as API breakage.

Since this will break only providers but not consumers of the API this
should be allowed also in minor versions. According to OSGi semantic
versioning
http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf
breaking providers in a minor version update is ok.

Therefore silence these errors using API filter rules.

Bug: 440757
Change-Id: Icabbd0e1de7e877c66a5c4a2c8391473f992a1aa
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-07-31 00:02:17 +02:00
Matthias Sohn efce340474 Implement RepoCommand.Project.hashCode() since we override equals()
Bug: 440757
Change-Id: I16614c75b62b2fbef05419dd8667e3c50889abe4
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-07-30 23:54:50 +02:00
Matthias Sohn 56fdbadc76 Remove @Override annotation illegal for interfaces on Java 5
Bug: 440757
Change-Id: I11897e8e680722313f28d9d241e23e92eddeb966
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-07-30 23:54:36 +02:00
Matthias Sohn 9b157c6dab Mark package org.eclipse.jgit.gitrepo.internal as x-internal
It's an internal package which isn't part of the API. Mark it x-internal
to silence @since tag warnings which are only raised for new API.

Bug: 440757
Change-Id: Id05deaca43f135cd1bfe83cf1f29787cbbdbecac
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-07-30 23:54:24 +02:00
Andrey Loskutov 3a161ac467 Small performance optimization for ignore rules/fnmatcher
- don't check empty segments generated by String.split()
 - don't continue to add segments if the matcher fails to match input
 - don't add empty heads
 - don't iterate over empty heads.

Bug: 440732
Change-Id: I7d04dccfe24d91275d17ba246662337d6dba66df
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-07-30 23:37:27 +02:00
Andrey Loskutov 0307123e5a Added toString() methods for better debugging of ignore rules
Change-Id: Ie31687faa2df47ecaacace2504c3b4e93f1ea809
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-07-30 23:17:43 +02:00
Maik Schreiber 7ff1e0d8f5 Fix RevertCommand to correctly revert multiple commits at once.
The fix is to move the new head commit to the newly-created revert
commit, so that additional revert commits will use the correct head.

Change-Id: I5de3a9a2a4c276e60af732e9c507cbbdfd1a4652
Signed-off-by: Maik Schreiber <blizzy@blizzy.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2014-07-30 16:20:08 +02:00
Shawn Pearce 7b0ee393ba Merge "Remove overlapping submodules from repo manifest." 2014-07-29 19:28:11 -04:00
Yuxuan 'fishy' Wang a9b9c5b324 Remove overlapping submodules from repo manifest.
Apparently repo allows projects overlapping, e.g. one project's path is "foo"
and another project's path is "foo/bar". This is not supported in git submodule.
At JGit repo side we'll skip all the submodules that are in subdirectories of
other submodules, and on repo side we'll make them submodules to resolve this
problem.

Change-Id: I6820c4ef400c530a36150b1228706adfcc43ef64
Signed-off-by: Yuxuan 'fishy' Wang <fishywang@google.com>
2014-07-29 16:16:36 -07:00
Shawn Pearce 219b9045f4 Merge "Added the missing export in MANIFEST.MF." 2014-07-29 19:01:13 -04:00
Christian Halstrick 5171a1843a Merge "RecursiveMerger should not fail on content-merge conflicts of parents" 2014-07-29 03:46:52 -04:00
Yuxuan 'fishy' Wang 73d38bfb33 Strip trailing /s in repo base URI.
Change-Id: I71040db2cca69638cfad89acdc9179ee80592b27
Signed-off-by: Yuxuan 'fishy' Wang <fishywang@google.com>
2014-07-28 16:13:50 -07:00
Christian Halstrick 3b031fe3dc RecursiveMerger should not fail on content-merge conflicts of parents
Previously when RecursiveMerger was trying to create a single virtual
common base for the merge it was failing when this lead to content-merge
conflicts. This is different from what native git is doing. When native
git's recursive merge algorithm creates a new common base it will merge
the multiple parents and simply take the merge result (potentially
including conflict markers) as common base. See my discussion with Shawn
here: http://www.spinics.net/lists/git/msg234959.html :

  > - How should workingtree, index (stage1,2,3) look like if during
that
  > merge of common ancestors a conflict occurs? Will I see in stage2
and
  > stage3 really see content of X1 and X2?

  Its done entirely in memory and never touches the working tree or
  index. When a conflict exists in the X1-X2 merge the conflict is
  preserved into the new virtual base.

There is still the possibility that the merge of parents lead to
conflicts. File/Folder conclicts, conflicts on filemodes. This commit
only fixes the situation for conflicts when merging content.

Bug: 438203
Change-Id: If45bc3d078b3d3de87b758e71d7379059d709603
2014-07-28 14:52:07 +02:00