Hugo Arès [Fri, 13 Mar 2015 17:57:38 +0000 (13:57 -0400)]
Make MyersDiff interruptible
For some specific file, MyersDiff goes into an infinite loop[1]. Since
this problem is hard to reproduce and possibly harder to fix, this
change makes the MyersDiff interruptible so the diff can be aborted at
least when such infinite loop happens.
When setting the parents of a commit with setParentIds() or
addParentId() it should be checked that we don't have duplicate parents.
An IllegalArgumentException should be thrown in this case.
Change-Id: I9fa9f31149b7732071b304bca232f037146de454 Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Kaloyan Raev [Fri, 6 Feb 2015 14:45:58 +0000 (16:45 +0200)]
CLI status should support --untracked-files
A special options handler is added to properly handle the short -u alias
of the option.
The "normal" mode is not supported by this patch, because this mode of
listing untracked files is not
supported by the org.eclipse.jgit.lib.IndexDiff class. This mode is not
necessary for my use case. It can be added later if anyone really needs
it.
The StatusTest is updated to cover all possible combinations of the
--porcelain and --untracked-files options.
Dave Borowitz [Wed, 11 Mar 2015 22:21:48 +0000 (15:21 -0700)]
TestRepository: Add a reset method to move HEAD around
This flushed out a number of bugs in the way DfsRefUpdate, or at least
the InMemoryRepository implementation, processes symrefs. These have
been fixed, to an extent, in InMemoryRepository, but other
implementations may still suffer from these bugs.
Dave Borowitz [Tue, 10 Mar 2015 22:21:06 +0000 (15:21 -0700)]
TreeWalk: Do not close reader passed explicitly to constructor
The TreeWalk(ObjectReader) constructor is explicitly to handle the case
where the caller is responsible for opening and closing the reader.
The reader should only be closed when it was created in the
TreeWalk(Repository) constructor.
Dave Borowitz [Tue, 10 Mar 2015 22:21:06 +0000 (15:21 -0700)]
RevWalk: Do not close reader passed explicitly to constructor
The RevWalk(ObjectReader) constructor is explicitly to handle the case
where the caller is responsible for opening and closing the reader.
The reader should only be closed when it was created in the
RevWalk(Repository) constructor.
Shawn Pearce [Tue, 10 Mar 2015 00:47:45 +0000 (17:47 -0700)]
Remove AutoCloseable from internal PackFile and friends
PackFile is held by the block cache and cannot be auto closed in a
try-with-resources statement. Remove the interface as JGit does
explicit management of the instances.
ObjectDatabase and RefDatabase are internal details of Repository
and are managed with the Repository. Marking them AutoCloseable
provides no value to the library or an application using the API.
Native git supports "git describe --long". This will enforce returning a
long description of a commit even if a tag is directly pointing to the
commit (in contrast to just returning the tag name as it is now). This
commit teaches JGits DescribeCommand and the describe command in the pgm
package to support "--long".
Bug: 460991
Change-Id: I65e179b79e89049c6deced3c71cb3ebb08ed0a8f Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Laurent Delaigue [Mon, 23 Feb 2015 10:18:50 +0000 (11:18 +0100)]
Refactored pre-commit hook to make it less invasive.
Hooks are now obtained via a convenient API like git commands, and
callers don't have to check for their existence.
The pre-commit hook has been updated accordingly.
Change-Id: I3383ffb10e2f3b588d7367b9139b606ec7f62758 Signed-off-by: Laurent Delaigue <laurent.delaigue@obeo.fr> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Dave Borowitz [Fri, 27 Feb 2015 23:08:50 +0000 (15:08 -0800)]
Add an in-process pack transport for use in tests
This allows for testing arbitrary sets of push/fetch hooks (e.g.
PreReceiveHook) without depending on either an external protocol (e.g.
HTTP) or the local filesystem.
Dave Borowitz [Fri, 27 Feb 2015 23:04:35 +0000 (15:04 -0800)]
Extract classes for transport within a JGit process
TransportLocal knows how to spin up a thread to allow two repositories
in the same process to communicate using the wire protocol. However,
it is still tied to local on-disk filesystems, and needs to be able to
fork processes if not using the default git-{upload,receive}-pack
implementation.
Extract out the connection classes so they can be used by other
transport implementations.
Matthias Sohn [Fri, 27 Feb 2015 00:54:12 +0000 (01:54 +0100)]
Merge branch 'stable-3.7'
* stable-3.7:
Prepare 3.7.1-SNAPSHOT builds
JGit v3.7.0.201502260915-r
Read user.name and email from environment first
Provide more details in exceptions thrown when packfile is invalid
Change-Id: I427f861c6bc94da5e3e05dbbebbf0ad15719a323 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Matthias Sohn [Tue, 24 Feb 2015 22:44:56 +0000 (23:44 +0100)]
Merge branch 'stable-3.7'
* stable-3.7:
Add log4j and slf4j-log4j bridge to jgit feature
Use slf4j to log instead of printing to System.err
Use Target Platform Definition DSL to generate target platforms
Matthias Sohn [Mon, 23 Feb 2015 12:49:24 +0000 (13:49 +0100)]
Read user.name and email from environment first
According to [1] user name and email are taken first from the
environment variables:
GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL
GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL
In case (some of) these environment variables are not set, the
information is taken from the git configuration.
JGit doesn not yet support the environment variables GIT_AUTHOR_DATE and
GIT_COMMITTER_DATE.
David Ostrovsky [Sun, 15 Feb 2015 19:31:29 +0000 (20:31 +0100)]
ArchiveCommand: Allow to pass options to underlying stream
Current ArchiveCommand design doesn't allow to pass in options to
underlying stream implementations. To overcome this, client has to
implement custom format implementation (it cannot be derived from
the existing one, because the classes are marked as final), and set
the options using ThreadLocal, before the method
Matthias Sohn [Tue, 10 Feb 2015 17:23:14 +0000 (18:23 +0100)]
Provide more details in exceptions thrown when packfile is invalid
Mention packfile path in exceptions thrown when we detect that a
packfile is invalid and make excplicit that corrupt packs are removed
from the pack list.
Change-Id: I454ada5f8e69307d3f34d1c1b8f3cb87607ddf35 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Matthias Sohn [Mon, 16 Feb 2015 23:12:01 +0000 (00:12 +0100)]
Use Target Platform Definition DSL to generate target platforms
The "Target Platform Definition DSL and Generator" [1] heavily
simplifies maintenance of target platforms. It allows to modularize
target platform definitions which eliminates code duplication. The
.target files understood by P2 and Tycho are generated from .tpd files
which are written in the target platform definition DSL.
In order to edit .tpd files and generate .target files install the
"Target Platform Definition DSL and Generator" 2.0 or later [2] (Note:
on Kepler you also need to add [3] to get Xtext 2.5 which is not
available by default on Kepler). This tools is needed only if you need
to change the Target Platform definition files (*.targetplatform and
*.tpd) and re-generate the *.target files. In normal development you do
not need this and can simply use the generated *.target themselves.
In addition
- update Orbit repository for 4.5 to Mars M5
- use latest released Orbit p2 repository for platform version Luna
and earlier
Matthias Sohn [Tue, 27 Jan 2015 00:43:24 +0000 (01:43 +0100)]
Move console classes to pgm bundle
Since we updated minimum Java version to Java 7 the console bundle
doesn't need to be a separate bundle anymore. Move the contained classes
to the pgm bundle which is using these classes.
Change-Id: If8e6f2d7405fdfe6f4b178673b4ccf99c67d4b64 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Matthias Sohn [Wed, 4 Feb 2015 13:21:52 +0000 (14:21 +0100)]
Merge branch 'stable-3.7'
* stable-3.7:
Add option --orphan for checkout
Prepare post 3.7.0.201502031740-rc1 builds
JGit v3.7.0.201502031740-rc1
Support for the pre-commit hook
Fix FileUtils.testRelativize_mixedCase which failed on Mac OS X
Add a hook test
Introduce hook support into the FS implementations
If a pack isn't found on disk remove it from pack list
Laurent Goubet [Fri, 31 Oct 2014 13:58:07 +0000 (14:58 +0100)]
Introduce hook support into the FS implementations
This introduces the background plumbing necessary to run git hooks from
JGit. This implementation will be OS-dependent as it aims to be
compatible with existing hooks, mostly written in Shell. It is
compatible with unix systems and windows as long as an Unix emulator
such as Cygwin is in its PATH.
Change-Id: I1f82a5205138fd8032614dd5b52aef14e02238ed Signed-off-by: Laurent Goubet <laurent.goubet@obeo.fr> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Dave Borowitz [Mon, 26 Jan 2015 17:21:05 +0000 (09:21 -0800)]
InMemoryRepository: Ensure new ref targets exist in the repo
ObjectInserter recently learned to read back inserted objects before
they have been flushed. It is in general unsafe to create refs to such
objects, but it is now much more possible to do so, by passing "new
RevWalk(inserter.newReader())" into RefUpdate#execute(RevWalk).
We can't change the RefUpdate interface to remove execute(RevWalk);
nor would we necessarily want to, for performance reasons. And in any
case, RefUpdate#safeParse explicitly ignores MissingObjectExceptions.
But we can enforce object existence in InMemoryRepository, which will
allow callers using this class in their tests to ensure they are using
the RefDatabase correctly.
In case the index contains wrong tree extensions don't throw a
ArrayIndexOutOfBounds exception but revalidate the tree extension.
It happened that the git index written by Git for Windows contained valid
(means entryCount>0) tree extensions for pathes which are not existing
in the index. Native git handles this inconsistency silently but JGit
was crashing with a ArrayIndexOutOfBounds exception. Teach JGit to
better recognize such cases and revalidate such extensions.
It's hard to write a test because JGit doesn't write such extensions. It
only reads, validates and makes use of them. But the bug tells how to
create such situations.
* changes:
Document that repo returned by SubmoduleAddCommand needs to be closed
Document that Git instance returned by CloneCommand needs to be closed
Matthias Sohn [Wed, 21 Jan 2015 21:27:46 +0000 (22:27 +0100)]
Merge remote-tracking branch 'origin/stable-3.6'
* origin/stable-3.6:
Prepare 3.6.3-SNAPSHOT builds
JGit v3.6.2.201501210735-r
Don't remove pack from pack list for problems which could be transient
Log reason for ignoring pack when IOException occurred
Change-Id: I61141b52839511d58e5a5b193bfde31e9f444a6c Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Matthias Sohn [Thu, 15 Jan 2015 16:30:11 +0000 (17:30 +0100)]
Don't remove pack from pack list for problems which could be transient
If we hit a corrupt object or invalid pack remove the pack from the pack
list. Other IOException could be transient hence we should not remove
the pack from the list to avoid the problem reported on the Gerrit list
[1]. It looks like in the reported case the pack was removed from the
pack list causing MissingObjectExceptions which disappear when the
server is restarted.
Rüdiger Herrmann [Sun, 11 Jan 2015 15:20:51 +0000 (16:20 +0100)]
[pgm] Prevent commands from writing progress to System.err
Commands which report progress used to write to System.err. This is not
desirable in cases where jgit.pgm is embedded. This change redirects
progress output to the error stream that is configured by the command.
Change-Id: I01fa5e167437e619448ac201fcb1cbf63bad96d7 Signed-off-by: Rüdiger Herrmann <ruediger.herrmann@gmx.de> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Stefan Beller [Tue, 13 Jan 2015 00:49:21 +0000 (16:49 -0800)]
Update atomic constant
The atomic feature is now cooking in -next in git-core. Very rarely
features are ejected from the the next branch in git-core, so I consider
it reasonable to come up with this patch now to make the 2 implementations
interoperable.
Change-Id: I806a8ae3c045ca5936f69cb903baf9b99ee39181 Signed-off-by: Stefan Beller <sbeller@google.com>
Arthur Daussy [Thu, 31 Jan 2013 19:27:10 +0000 (20:27 +0100)]
Add basic support for .gitattributes
Core classes to parse and process .gitattributes files including
support for reading attributes in WorkingTreeIterator and the
dirCacheIterator.
The implementation follows the git ignore implementation. It supports
lazy reading attributes while walking the working tree.
Bug: 342372
CQ: 9078
Change-Id: I05f3ce1861fbf9896b1bcb7816ba78af35f3ad3d Also-by: Marc Strapetz <marc.strapetz@syntevo.com> Also-by: Gunnar Wagenknecht <gunnar@wagenknecht.org> Also-by: Arthur Daussy <arthur.daussy@obeo.fr> Signed-off-by: Gunnar Wagenknecht <gunnar@wagenknecht.org> Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com> Signed-off-by: Arthur Daussy <arthur.daussy@obeo.fr> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
Matthias Sohn [Sun, 4 Jan 2015 01:18:27 +0000 (02:18 +0100)]
Merge branch 'stable-3.6'
* stable-3.6:
Prepare 3.6.2-SNAPSHOT builds
JGit v3.6.1.201501031845-r
Trim author/committer name and email in commit header
Rename detection should canonicalize line endings
PathMatcher should respect "assumeDirectory" flag
Change-Id: Idd48c6d94cf1ab09abc07f70d50890b1b78e1833 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Rüdiger Herrmann [Fri, 17 Oct 2014 11:05:41 +0000 (13:05 +0200)]
Trim author/committer name and email in commit header
C Git trims name and email before inserting them into the commit header
so that " A U Thor " and " author@example.com " becomes
"A U Thor <author@example.com>" with a single separating space.
This changes PersonIdent#toExternalString() to trim name and email
before concatenating them.
Shawn Pearce [Sun, 30 Nov 2014 18:34:36 +0000 (10:34 -0800)]
Add .mailmap to correct Shawn and Saša's log entries
Both myself and Saša Živkov have been using different names
and email addresses in the JGit history. Configure .mailmap
to map to consistent entries for us.
Saša Živkov's entries were taken from the Gerrit Code Review
.mailmap file.
Andrey Loskutov [Sun, 14 Dec 2014 17:07:59 +0000 (18:07 +0100)]
PathMatcher should respect "assumeDirectory" flag
The path matcher should not fail if the rule ends with trailing slash,
target pattern does not ends with the slash and the "assumeDirectory"
flag is set.
E.g. */bin/ should also match a/bin if this pattern is threated as
directory by WorkingTreeIterator (FileMode.TREE).
The old code/tests have never tested directory rules with patterns
*without* trailing slashes but with the "assumeDirectory" flag set.
Unfortunately this is exactly what WorkingTreeIterator does... The tests
are changed to test *both* cases now (with trailing slash and without)
if the target pattern has trailing slash (represents directory).
Matthias Sohn [Wed, 24 Dec 2014 00:08:58 +0000 (01:08 +0100)]
Merge branch 'stable-3.6'
* stable-3.6:
Prepare 3.6.1-SNAPSHOT builds
JGit v3.6.0.201412230720-r
[pgm] Add option --bare to clone command
[pgm] Implement clone using CloneCommand
Fix junit tests under windows when the platform is explicitly changed
Fix unit tests for windows by explicitly closing test repos
[pgm] Add option --tags for ls-remote
[pgm] Add option --heads for ls-remote
[pgm] Use LsRemoteCommand to implement ls-remote and add a test
Change-Id: I8f31e76cb7e9416919f37e02c7e51ab1d221df40 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>