Commit Graph

3568 Commits

Author SHA1 Message Date
Matthias Sohn 197e3393a5 Merge bundle org.eclipse.jgit.java7 into org.eclipse.jgit
As we moved minimum Java version to 7 we don't need a separate bundle
and feature for JGit features depending on Java 7 anymore.

Change-Id: Ib5da61b0886ddbdea65298f1e8c6d65c9879ced1
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-03-23 14:23:07 +01:00
Matthias Sohn 8ec01500e2 Add missing @since tag to DiffInterruptedException
Change-Id: Ibadbc1b476bfe0d1fe11979ec237a3554966eb59
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-03-19 14:53:43 +01:00
Jonathan Nieder 5967b65838 Revert "CommitBuilder should check for duplicate parents"
This reverts commit 6bc48cdc62.

Until git v1.7.10.2~29^2~1 (builtin/merge.c: reduce parents early,
2012-04-17), C git merge would make merge commits with duplicate parents
when asked to with a series of commands like the following:

  git checkout origin/master
  git merge --no-ff origin/master

Nowadays "git merge" removes redundant parents more aggressively
(whenever one parent is an ancestor of another and not just when
duplicates exist) but merges with duplicate parents are still permitted
and can be created with git fast-import or git commit-tree and history
viewers need to be able to cope with them.

CommitBuilder is an interface analagous to commit-tree, so it should
allow duplicate parents.  (That said, an option to automatically remove
redundant parents would be useful.)

Reported-by: Dave Borowitz <dborowitz@google.com>
Change-Id: Ia682238397eb1de8541802210fa875fdd50f62f0
Signed-off-by: Jonathan Nieder <jrn@google.com>
2015-03-18 16:26:05 -07:00
Dave Borowitz 65c379e02d Merge changes I51167503,I794eca3a
* changes:
  TemporaryBuffer: Clear block pointer list instead of reallocating
  TemporaryBuffer: Allow presizing block pointer list
2015-03-18 17:19:52 -04:00
Dave Borowitz e3e9e1f003 TemporaryBuffer: Clear block pointer list instead of reallocating
The block pointer list may have been relatively large, so no need to
make more garbage. Instead, just clear the list and null out all the
elements.

Another possible motivation: a caller may have provided an inaccurate
estimated size, so the list might have been resized several times. If
the list is reused later for a similarly underestimated workload, this
fix will prevent additional resizing on subsequent usages.

Change-Id: I511675035dcff1117381a46c294cc11aded10893
2015-03-18 13:38:58 -07:00
Dave Borowitz edf4368b0c TemporaryBuffer: Allow presizing block pointer list
Callers may wish to use TemporaryBuffer as an essentially unbounded
buffer by passing Integer.MAX_VALUE as the size. (This makes it
behave like ByteArrayOutputStream, only without requiring contiguous
memory.) Unfortunately, it was always allocating an array in the
backing block pointer list to hold enough blocks to MAX_VALUE--all
262,016 of them. It wasn't allocating the blocks themselves, but this
array was still extremely wasteful, using about 2MiB of memory on a
64-bit system.

Tweak the interface to specify an estimated size, and only allocate
the block pointer list enough entries to hold that size. It's an
ArrayList, so if that estimate was wrong, it'll grow. We assume the
cost of finding enough contiguous memory to grow that array is
acceptable.

While we're in there, fix an off-by-one error: due to integer division
we were undercounting the number of blocks needed to store n bytes of
data as (n / SZ).

Change-Id: I794eca3ac4472bcc605b3641e177922aca92b9c0
2015-03-18 13:38:57 -07:00
Christian Halstrick ebed526329 Merge "Make MyersDiff interruptible" 2015-03-18 14:40:29 -04:00
Dave Borowitz 89b91ad406 InMemoryRepository: Use a real Builder class
Change-Id: I161b98a58503415955a21f2720395611f439ce98
2015-03-18 10:22:12 -04:00
Dave Borowitz be08dcb6b5 TestRepository: Expose a Git instance
Change-Id: I2fab7dd9a24205686db4724e77c0fd0a28f2075e
2015-03-18 06:59:55 -07:00
Dave Borowitz fd402f71a3 Git: Don't close underlying repo if it came from from a caller
Since 27ae8bc65 Git has implemented AutoCloseable, which means Eclipse
may warn if close() is never called on a Git instance. For example,
the following would result in a resource warning:

  Repository repo = openRepository(foo);
  Git git = new Git(repo);
  try {
    git.someCommand().call();
  } finally {
    repo.close();
  }

(The same warning would occur if repo were created in a try-with-
resources block.)

The "obvious" fix is to open git in a try-with-resources block:

  try (Repository repo = openRepository(foo);
      Git git = new Git(repo)) {
    git.someCommand().call();
  }

Unfortunately, this construction was subtly broken: it would call both
git.close() and repo.close(), but git.close() would call repo.close()
again. Depending on the repository implementation, this might or might
not be ok. If it's not ok, it might not immediately cause an error, if
the reference count of repo was >2 at the time of closing.

Of course, explicitly calling git.close() followed by repo.close() in
two finally blocks has had the same double-closing problem since
forever. But the problem became worse when Git started implementing
AutoCloseable, because now Eclipse is _actively encouraging_
developers to change working code into broken code.

To work around this, keep track in Git's constructor of whether the
repository was passed in or opened at construction time, and only
close the repository if it was opened by Git.

Note that in the original example, there was not _actually_ a resource
leak, since repo was closed exactly once; git did not _need_ to be
closed in this case. But at least fixing this false-positive warning
no longer introduces a real bug.

Change-Id: Ie927a26ce3ae2bf8c3ef5cb963a60847067db95a
2015-03-17 17:05:55 -07:00
Hugo Arès 954306be81 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.

[1]https://bugs.eclipse.org/bugs/show_bug.cgi?id=444623

Change-Id: I6e006ccb122d1e68c9846a24d5399d94776c2858
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
2015-03-17 16:28:46 -04:00
Matthias Sohn 3ac06ca6de Fix string externalization warnings in BaseFormat
Change-Id: Ie40aa1f889191e45e4d4a7a144c3176d521f6cfa
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-03-12 18:35:47 -07:00
Matthias Sohn 994b39a007 Add missing @since tags for new API methods in archive bundle
Change-Id: I891e2cf9ca89ae1948e9713a412d31ec66faac86
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-03-12 18:35:46 -07:00
Christian Halstrick 6bc48cdc62 CommitBuilder should check for duplicate parents
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>
2015-03-12 18:18:45 -07:00
Kaloyan Raev 9041fbc958 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.

Bug: 459319
Change-Id: I305ac95739cfed0c16735e0987844e57fa27e236
Signed-off-by: Kaloyan Raev <kaloyan.r@zend.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-03-12 18:10:26 -07:00
Dave Borowitz 8b6f9ace15 TestRepository: Allow setting explicit Change-Id
This includes both leaving existing Change-Ids alone (as, for example
Gerrit's commit-msg hook does) and programmatically setting a value.

Change-Id: Iaaffb0107ae27de24df1f0e95a8d628fb8ea5364
2015-03-12 12:47:18 -07:00
Dave Borowitz 6ed07f5cb5 TestRepository: Ignore existing Change-Id in message
Change-Id: I343c3065fa369ef8aab2b033ac1e392b28d10daf
2015-03-12 12:46:50 -07:00
Dave Borowitz 0b625445ef TestRepository: Support committing to unborn symref
Change-Id: I6bcee635adda7c929f6fa68ef20438fe77e49184
2015-03-12 12:46:26 -07:00
Dave Borowitz 828721826a TestRepository: Expose some getters for CommitBuilder
Change-Id: Ic6d179bd2de0081633c22fb82ca68ea619cb686f
2015-03-12 12:46:26 -07:00
Dave Borowitz da85ca73ff TestRepository: Add methods to amend commits or refs
Change-Id: I47082416f6e281262b160ba15272258f9109abd1
2015-03-12 12:46:24 -07:00
Dave Borowitz d79cadb3cf 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.

Change-Id: Ifd12115a0060b9ff45a88d305b72f91ca0472f9a
2015-03-12 12:45:46 -07:00
Dave Borowitz c1d40caa32 TestRepository: Optionally insert Change-Id in commit message
Copied the implementation from CommitCommand.

Change-Id: Iade0e2d70bde70cfa830fe23bcc41959b011a14a
2015-03-12 10:47:12 -07:00
Shawn Pearce c3b8615ce8 Merge topic 'testrepo'
* changes:
  TestRepository: Allow custom author/committer per-commit
  TestRepository: Use try-with-resources where appropriate
2015-03-12 13:11:21 -04:00
Markus Duft ede4b3d5a3 Fix compile error due to missing dependencies and since tags
Change-Id: I98a9f17f987c4f3ea19d107f681c44754ed83dca
Signed-off-by: Markus Duft <markus.duft@ssi-schaefer.com>
2015-03-12 15:17:27 +01:00
Dave Borowitz 3d5e70bc5a TestRepository: Allow custom author/committer per-commit
Change-Id: I078fe00470ebe60f93f4a718c163dd1412fdc776
2015-03-11 11:41:02 -07:00
Dave Borowitz 6599111d92 TestRepository: Use try-with-resources where appropriate
Change-Id: I06f9534ab84278df37a140700fc2bed5ab667299
2015-03-11 11:41:00 -07:00
Shawn Pearce d1bda470d4 Merge "ArchiveCommand: Allow to pass options to underlying stream" 2015-03-11 13:27:18 -04:00
Shawn Pearce 0f51246b0e Merge changes I627681be,I334034a2
* changes:
  TreeWalk: Do not close reader passed explicitly to constructor
  TreeWalk: Stop using deprecated ObjectReader#release()
2015-03-10 19:55:20 -04:00
Dave Borowitz 6f4281b11a 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.

Change-Id: I627681be80d69ea549f953255a64c7b3b68bcec9
2015-03-10 16:27:22 -07:00
Dave Borowitz 421e69a4a0 TreeWalk: Stop using deprecated ObjectReader#release()
Change-Id: I334034a2991a07664302bc8d1f3dead85c2caffe
2015-03-10 16:27:22 -07:00
Matthew Spurrier 1383bdd5bc Make s3 domain dynamic to support different s3 regions
Change-Id: If8f9e85368c56d88bb6ae9efe1b3a29cc18cc1d5
Signed-off-by: Matthew Spurrier <matthew@spurrier.com.au>
2015-03-10 16:11:48 -07:00
Dave Borowitz 1e694f3847 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.

Change-Id: Ic0d595dc8d10de79e87549546c6c5ea2dc617e9b
2015-03-10 15:27:53 -07:00
Dave Borowitz a91f87d9e1 RevWalk: Stop using deprecated ObjectReader#release()
Change-Id: If4d34f18352bd17467aeded6fd3478f29244657b
2015-03-10 15:24:53 -07:00
Dave Borowitz 019a21db27 Update all standard maven plugins to latest versions
The latest versions of the javadoc and source plugins in particular
avoid some pathological slowness I'd been seeing on Linux with Java
7 or later.

Change-Id: I9fddd7e6ef513debec5f014ed2efc4fea6917d1f
2015-03-10 14:41:04 -07:00
Christian Halstrick af3faa764f Merge "Add "--long" option to JGit describe" 2015-03-10 15:17:58 -04:00
Shawn Pearce 7ab6ffdf50 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.

Change-Id: Ibee19eadd66233e6666b601583daa1834a7778f1
2015-03-09 20:59:09 -04:00
Shawn Pearce ce3997344e PushCertificateParser: Fix check for blank line after header
Reference equality (!= or ==) cannot be used to check for
String equality. String objects are not necessarily interned
to the same instance.

Use .isEmpty() since the function only cares about an empty
string and does not need to test a specific string value.

Change-Id: If530cb59666a8196d57d2348c893706a517ea541
2015-03-09 17:30:08 -07:00
Shawn Pearce 8cf14cfdad Cleanup some push certificate related javadoc
Change-Id: I319ee4e99462598bf6a934b1efc7939bc4b057a5
2015-03-09 17:28:16 -07:00
David Pletcher fe7c556f34 Fix an invalid format string
The %x format specifier is not valid for a byte array.
This patch fixes a bug that would cause an IllegalFormatConversionException.

Change-Id: I025975eca7b2f10bbafa39f5519f8668e6536541
Signed-off-by: David Pletcher <dpletcher@google.com>
2015-03-09 15:47:01 -07:00
Christian Halstrick 0e3ddea1b0 Add "--long" option to JGit describe
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>
2015-03-09 13:48:04 -07:00
Matthias Sohn a8fb77853a Merge "Support for the commit-msg hook." 2015-03-02 18:17:57 -05:00
Shawn Pearce a75bd35fa4 Merge "Allow public access to PackIndex" 2015-03-02 16:28:35 -05:00
David Pletcher cc8c270c9b Allow public access to PackIndex
The index provides access to a list of objects in a pack.
This will be helpful for repository integrity checking.

Change-Id: I435eeeb3fe1b1f5632d40528936416e97491d412
Signed-off-by: David Pletcher <dpletcher@google.com>
2015-03-02 15:52:27 -05:00
Laurent Delaigue efeb02bf2b Support for the commit-msg hook.
This hook uses the file .git/COMMIT_EDITMSG to receive and potentially
modify the commit message.

Change-Id: Ibe2faadfb5d3932a5a3da2252d8156c4c04856c7
Signed-off-by: Laurent Delaigue <laurent.delaigue@obeo.fr>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-03-02 17:45:15 +01:00
Laurent Delaigue 26fd56f167 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>
2015-03-02 15:33:30 +01:00
Dave Borowitz 12a55c3475 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.

Change-Id: I4ba2fff9c8a484f990dea05e14b0772deddb7411
2015-02-27 16:26:39 -08:00
Dave Borowitz 900d7da8ab 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.

Change-Id: I5db59086740735508c2e70a597c2d1a89014b072
2015-02-27 15:22:15 -08:00
Matthias Sohn 360071d75d Add missing since tags for new API
Change-Id: I90d4d7566b2e220b8ea8ea1c644fe4b7fa81c0a3
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-02-27 02:33:05 +01:00
Matthias Sohn 1350f7ea1d 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>
2015-02-27 01:54:12 +01:00
Matthias Sohn 9b486e3906 Prepare 3.7.1-SNAPSHOT builds
Change-Id: I2e97610ea9e552e5800e7ca895fd193c8bc507aa
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-02-27 01:41:30 +01:00