]> source.dussan.org Git - jgit.git/log
jgit.git
7 years agoDecide whether to "Accept-Encoding: gzip" on a request-by-request basis 47/85647/12
Zhen Chen [Wed, 23 Nov 2016 00:39:27 +0000 (16:39 -0800)]
Decide whether to "Accept-Encoding: gzip" on a request-by-request basis

When the reply is already compressed (e.g. a packfile fetched using dumb
HTTP), "Content-Encoding: gzip" wastes bandwidth relative to sending the
content raw. So don't "Accept-Encoding: gzip" for such requests.

Change-Id: Id25702c0b0ed2895df8e9790052c3417d713572c
Signed-off-by: Zhen Chen <czhen@google.com>
7 years agoConfigure max heap size for Maven build 06/86806/1
Matthias Sohn [Fri, 9 Dec 2016 10:02:10 +0000 (11:02 +0100)]
Configure max heap size for Maven build

We faced many OOM errors on Hudson recently, so increase maximum heap size.

Change-Id: I81d4d562a06afcd8b4ff7d1f69c4d7f12099afad
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
7 years agoUpgrade errorprone to 2.0.15 23/86423/3
David Pursehouse [Tue, 6 Dec 2016 05:02:42 +0000 (14:02 +0900)]
Upgrade errorprone to 2.0.15

Change-Id: I05d3e12178f8f0b5a687c8e09c2dcf80580acfb4
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
7 years agoReplace usage of deprecated EWAHCompressedBitmap.add(long) 84/86684/2
David Pursehouse [Thu, 8 Dec 2016 02:10:35 +0000 (11:10 +0900)]
Replace usage of deprecated EWAHCompressedBitmap.add(long)

The add(long) method was deprecated in favor of addWord(long) in
the 0.8.3 release of JavaEWAH [1].

[1] https://github.com/lemire/javaewah/commit/e443cf5e

Change-Id: I89c397ed02e040f57663d04504399dfdc0889626
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
7 years agoExpose getObjectToTransfer method of FileLfsServlet 68/85668/3
Jacek Centkowski [Thu, 24 Nov 2016 09:58:14 +0000 (10:58 +0100)]
Expose getObjectToTransfer method of FileLfsServlet

Providing own implementation to doGet/doPut methods is troublesome when
this method is private.

Change-Id: I098cdc5cb90410eaaebc56c88c2d9e168584dd6d
Signed-off-by: Jacek Centkowski <geminica.programs@gmail.com>
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
7 years agoMerge branch 'stable-4.5' 32/86432/1
David Pursehouse [Tue, 6 Dec 2016 07:55:16 +0000 (16:55 +0900)]
Merge branch 'stable-4.5'

* stable-4.5:
  Use the same variable to check and extract LFS object id

Change-Id: I314bd4373f40843c68853b3999f60d85e08628d9
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
7 years agoUpgrade buck to latest version 17/86117/1
David Pursehouse [Thu, 1 Dec 2016 06:57:17 +0000 (15:57 +0900)]
Upgrade buck to latest version

The latest version removes dependency on `realpath` which is not
available by default on OSX.

This upgrades buck to the same version used on Gerrit master.

Change-Id: I584211986be4e64f68d4eb905c09d3c5d60133e7
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
7 years agoFix merge-base calculation 80/85580/5
Christian Halstrick [Wed, 23 Nov 2016 11:52:16 +0000 (12:52 +0100)]
Fix merge-base calculation

Fix JGits merge-base calculation in case of inconsistent commit times.
JGit was potentially failing to compute correct merge-bases when the
commit times where inconsistent (a parent commit was younger than a
child commit). The code in MergeBaseGenerator was aware of the fact that
sometimes the discovery of a merge base x can occur after the parents of
x have been seen (see comment in #carryOntoOne()). But in the light of
inconsistent commit times it was possible that these parents of a
merge-base have already been returned as a merge-base.

This commit fixes the bug by buffering all commits generated by
MergeBaseGenerator. It is expected that this buffer will be small
because the number of merge-bases will be small. Additionally a new
flag is used to mark the ancestors of merge-bases. This allows to filter
out the unwanted commits.

Bug: 507584
Change-Id: I9cc140b784c3231b972bd2c3de61a789365237ab

7 years agoConfigure Maven to run tests concurrently by default 30/85730/1
Matthias Sohn [Thu, 24 Nov 2016 23:43:11 +0000 (00:43 +0100)]
Configure Maven to run tests concurrently by default

Maven 3.3.1 or later supports sharing project specific command line
options
https://maven.apache.org/docs/3.3.1/release-notes.html

Change-Id: I61ddf08ff8c0ebb76fc2e1d0a0cd5902c65f9469
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
7 years agoEnable error-prone for the Maven build 29/85729/1
David Pursehouse [Fri, 18 Nov 2016 01:30:27 +0000 (17:30 -0800)]
Enable error-prone for the Maven build

- update maven-compiler-plugin to 3.6.0
- exclude InsecureCipherFactory from errorprone checks

See
https://maven.apache.org/guides/mini/guide-default-execution-ids.html#Example:_Configuring_compile_to_run_twice
https://groups.google.com/d/topic/error-prone-discuss/pzT45ZMCQOc/discussion

Change-Id: Ic16d3f15cf2ef40de62fe6bfe4b8b35f0c1edc4e
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
7 years agoFix encoding of LFSPointer files 68/84668/4
Christian Halstrick [Tue, 8 Nov 2016 12:42:34 +0000 (13:42 +0100)]
Fix encoding of LFSPointer files

LFS pointer files have to be UTF-8 with \n as line ending character.
That is described in [1]. Fix JGit to follow this rules.

[1] https://github.com/github/git-lfs/blob/master/docs/spec.md

Bug: 507120
Change-Id: Ib6bd13f1cc17f1a3de125249b4f250b7b0692396

7 years agoUse the same variable to check and extract LFS object id 71/85671/1
Jacek Centkowski [Thu, 24 Nov 2016 10:32:48 +0000 (11:32 +0100)]
Use the same variable to check and extract LFS object id

It is easier to maintain when the same variable is used for both check
and extraction of LFS object id.

Change-Id: I5406f9bc4a085aa164c4565a9667ad2925105190
Signed-off-by: Jacek Centkowski <geminica.programs@gmail.com>
8 years agoSpecify RevisionSyntaxException message in Repository#resolve 52/85552/3
Grace Wang [Wed, 23 Nov 2016 02:05:39 +0000 (21:05 -0500)]
Specify RevisionSyntaxException message in Repository#resolve

This does not address all cases where no message is specified, only
cases where Repository#isValidRefName returns false.

Change-Id: Ib88cdabfdcdf37be0053e06949b0e21ad87a9575
Signed-off-by: Grace Wang <gracewang92@gmail.com>
8 years agoAdd missing @since tags for new API 37/85637/1
Matthias Sohn [Wed, 23 Nov 2016 22:29:41 +0000 (23:29 +0100)]
Add missing @since tags for new API

Change-Id: I900d745195f58c067fadf209bb92cd3c852c59f4
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agodump HTTP: Avoid being confused by Content-Length of a gzipped stream 45/85545/5
Zhen Chen [Tue, 22 Nov 2016 23:53:06 +0000 (15:53 -0800)]
dump HTTP: Avoid being confused by Content-Length of a gzipped stream

TransportHttp sets 'Accept-Encoding: gzip' to allow the server to
compress HTTP responses. When fetching a loose object over HTTP, it
uses the following code to read the response:

       InputStream in = openInputStream(c);
       int len = c.getContentLength();
       return new FileStream(in, len);

If the content is gzipped, openInputStream decompresses it and produces
the correct content for the object. Unfortunately the Content-Length
header contains the length of the compressed stream instead of the
actual content length. Use a length of -1 instead since we don't know
the actual length.

Loose objects are already compressed, so the gzip encoding typically
produces a longer compressed payload. The value from the Content-Length
is too high, producing EOFException: Short read of block.

Change-Id: I8d5284dad608e3abd8217823da2b365e8cd998b0
Signed-off-by: Zhen Chen <czhen@google.com>
Helped-by: Jonathan Nieder <jrn@google.com>
8 years agoMerge "Close input stream after use"
Jonathan Nieder [Tue, 22 Nov 2016 20:38:05 +0000 (15:38 -0500)]
Merge "Close input stream after use"

8 years agoFix content length in HttpClientConnection 27/85527/4
Zhen Chen [Tue, 22 Nov 2016 01:15:15 +0000 (17:15 -0800)]
Fix content length in HttpClientConnection

Per the interface specification, the getContentLength method should
return -1 if content length is unknown or greater than
Integer.MAX_VALUE.

For chunked transfer encoding, the content length is not included in the
header, hence will cause a NullPointerException when trying to parse the
content length header.

Change-Id: Iaa36b5c146a8d654e364635fa0bd2d14129baf17
Signed-off-by: Zhen Chen <czhen@google.com>
8 years agoClose input stream after use 29/85529/1
Zhen Chen [Tue, 22 Nov 2016 19:59:32 +0000 (11:59 -0800)]
Close input stream after use

The InputStream in FileStream in downloadPack is never closed.

Change-Id: I59975d0b8d51f4b3e3ba9d4496b254d508cb936d
Signed-off-by: Zhen Chen <czhen@google.com>
8 years agoDefine MonotonicClock interface for advanced timestamps 06/85106/9
Shawn Pearce [Wed, 16 Nov 2016 01:34:07 +0000 (17:34 -0800)]
Define MonotonicClock interface for advanced timestamps

MonotonicClock can be implemented to provide more certainity about
time than the standard System.currentTimeMillis() can provide. This
can be used by classes such as PersonIdent and Ketch to rely on
more certainity about time moving in a strictly ascending order.

Gerrit Code Review can also leverage this interface through its
embedding of JGit and use MonotonicClock and ProposedTimestamp to
provide stronger assurance that NoteDb time is moving forward.

Change-Id: I1a3cbd49a39b150a0d49b36d572da113ca83a786

8 years agoAdd Oxygen target platform and remove target platforms older than Mars 80/85180/2
Matthias Sohn [Wed, 16 Nov 2016 23:28:05 +0000 (00:28 +0100)]
Add Oxygen target platform and remove target platforms older than Mars

Change-Id: I196c3c95dafa5ea5f165d20aaac2ce07a2c53631
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoUpdate JavaEWAH to 1.1.6 04/77604/3
Dave Borowitz [Wed, 20 Jul 2016 14:16:26 +0000 (10:16 -0400)]
Update JavaEWAH to 1.1.6

Use Oxygen M3 Orbit repository which provides the bundles built using
the new orbit-recipe based build.

CQ: 11658
Change-Id: I7f3dcc966732b32830c75d5daa55383bd028d182
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAdd missing @since tags for new API 21/85021/2
Matthias Sohn [Mon, 14 Nov 2016 23:57:00 +0000 (00:57 +0100)]
Add missing @since tags for new API

Change-Id: Iaf83f66637d6a13e4a6d096ba8529553af7e30ed
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix cryptoVer constant name to CRYPTO_VER 17/85017/2
Shawn Pearce [Mon, 14 Nov 2016 22:52:46 +0000 (14:52 -0800)]
Fix cryptoVer constant name to CRYPTO_VER

Change-Id: I46c39f2eceb4d58e49bd6273b87711f35250ab5c

8 years agoRepositoryCache: simplify code 16/85016/2
Shawn Pearce [Mon, 14 Nov 2016 22:52:23 +0000 (14:52 -0800)]
RepositoryCache: simplify code

The type parameters can now be inferred when creating
ConcurrentHashMap.

A for loop over the keys of a ConcurrentHashMap doesn't
need to use an Iterator<Map.Entry>; loop syntax handles
this just fine over keySet().

Change-Id: I1f85bb81b77f7cd1caec77197f2f0bf78e4a82a1

8 years agoAdd missing @Override found by ErrorProne 15/85015/2
Shawn Pearce [Mon, 14 Nov 2016 22:51:08 +0000 (14:51 -0800)]
Add missing @Override found by ErrorProne

Change-Id: I585242507815aad4aa0103fd55a6c369e342ab33

8 years agoDeprecate SafeBufferedOutputStream 40/84940/4
Shawn Pearce [Sun, 13 Nov 2016 19:24:41 +0000 (11:24 -0800)]
Deprecate SafeBufferedOutputStream

Java 8 fixed the silent flush during close issue by
FilterOutputStream (base class of BufferedOutputStream)
using try-with-resources to close the stream, getting a
behavior matching what JGit's SafeBufferedOutputStream
was doing:

  try {
    flush();
  } finally {
    out.close();
  }

With Java 8 as the minimum required version to run JGit
it is no longer necessary to override close() or have
this class. Deprecate the class, and use the JRE's version
of close.

Change-Id: Ic0584c140010278dbe4062df2e71be5df9a797b3

8 years agoMerge "Support {get,set}GitwebDescription on InMemoryRepository"
David Pursehouse [Mon, 14 Nov 2016 22:54:15 +0000 (17:54 -0500)]
Merge "Support {get,set}GitwebDescription on InMemoryRepository"

8 years agoSupport {get,set}GitwebDescription on InMemoryRepository 10/85010/2
Shawn Pearce [Mon, 14 Nov 2016 21:59:59 +0000 (13:59 -0800)]
Support {get,set}GitwebDescription on InMemoryRepository

This simplifies testing for Gerrit Code Review where
application code is updating the repository description
and the test harness uses InMemoryRepository.

Change-Id: I9fbcc028ae24d90209a862f5f4f03e46bfb71db0

8 years agoOrganize imports 02/85002/1
David Pursehouse [Mon, 14 Nov 2016 21:25:20 +0000 (13:25 -0800)]
Organize imports

Change-Id: I7c545d06b1bced678c020fab9af1382bc4416b6e
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoAdd {get,set}GitwebDescription to Repository 94/84994/4
Shawn Pearce [Mon, 14 Nov 2016 19:00:34 +0000 (11:00 -0800)]
Add {get,set}GitwebDescription to Repository

This method pair allows the caller to read and modify the description
file that is traditionally used by gitweb and cgit when rendering a
repository on the web.

Gerrit Code Review has offered this feature for years as part of
its GitRepositoryManager interface, but its fundamentally a feature
of JGit and its Repository abstraction.

git-core typically initializes a repository with a default value
inside the description file. During getDescription() this string
is converted to null as it is never a useful description.

Change-Id: I0a457026c74e9c73ea27e6f070d5fbaca3439be5

8 years agoMerge "Don't serialize internal hash collision chain link"
Shawn Pearce [Mon, 14 Nov 2016 18:27:09 +0000 (13:27 -0500)]
Merge "Don't serialize internal hash collision chain link"

8 years agoMerge "Reduce synchronized scope around ConcurrentHashMap"
Shawn Pearce [Mon, 14 Nov 2016 18:25:36 +0000 (13:25 -0500)]
Merge "Reduce synchronized scope around ConcurrentHashMap"

8 years agoMerge changes Id89b3cd0,I5b0fb122
Shawn Pearce [Mon, 14 Nov 2016 18:23:36 +0000 (13:23 -0500)]
Merge changes Id89b3cd0,I5b0fb122

* changes:
  FileLfsServlet: Make sendError protected
  Make ObjectUploadListener public

8 years agoMerge "StreamCopyThread: Remove unused AtomicInteger import"
Jonathan Nieder [Mon, 14 Nov 2016 00:05:48 +0000 (19:05 -0500)]
Merge "StreamCopyThread: Remove unused AtomicInteger import"

8 years agoStreamCopyThread: Remove unused AtomicInteger import 51/84951/1
Jonathan Nieder [Mon, 14 Nov 2016 00:01:16 +0000 (16:01 -0800)]
StreamCopyThread: Remove unused AtomicInteger import

I forgot to do this in 97f3baa0d3df7ed26a55b2240cc5ce1a04861a4c
(StreamCopyThread: Remove unnecessary flushCount, 2016-11-13).

Change-Id: Iaed9f345848cf0f854c9d0debcf94bc831d53054

8 years agoMerge "Extract insecure Cipher factory"
Matthias Sohn [Mon, 14 Nov 2016 00:00:24 +0000 (19:00 -0500)]
Merge "Extract insecure Cipher factory"

8 years agoMerge "Get rid of SoftReference in RepositoryCache"
Jonathan Nieder [Sun, 13 Nov 2016 23:43:54 +0000 (18:43 -0500)]
Merge "Get rid of SoftReference in RepositoryCache"

8 years agoExtract insecure Cipher factory 41/84941/2
Shawn Pearce [Sun, 13 Nov 2016 19:52:12 +0000 (11:52 -0800)]
Extract insecure Cipher factory

Bazel runs ErrorProne by default and ErrorProne rightly complains that
allowing the user to specify any Cipher can lead to insecure code
(in particular, getCipher("AES") operates in ECB mode). Unfortunately
this is required to support existing repositories insecurely stored
on S3.

Extract the insecure factory code to its own class so this can be built
as a java_library() with this check disabled.

Change-Id: I34f381965bdaa25d5aa8ebf6d8d5271b238334e0

8 years agoFileLfsServlet: Make sendError protected 33/84933/2
David Pursehouse [Wed, 9 Nov 2016 02:30:15 +0000 (11:30 +0900)]
FileLfsServlet: Make sendError protected

Change-Id: Id89b3cd0da86a535946feb15254737bbf8d855d4
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoMake ObjectUploadListener public 32/84932/2
David Pursehouse [Sat, 12 Nov 2016 21:22:24 +0000 (13:22 -0800)]
Make ObjectUploadListener public

Change-Id: I5b0fb1220bc0e5c660f1b5373abc5868d985c60b
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoStreamCopyThread: flush cannot interrupt a write 45/84945/2
Jonathan Nieder [Sun, 13 Nov 2016 21:26:33 +0000 (13:26 -0800)]
StreamCopyThread: flush cannot interrupt a write

Because flush calls interrupt with writeLock held, it cannot interrupt
a write.  Simplify by no longer defending against that.

Change-Id: Ib0b39b425335ff7b0ea1b1733562da5392576a15

8 years agoStreamCopyThread: Remove unnecessary flushCount 44/84944/1
Jonathan Nieder [Sun, 13 Nov 2016 21:16:48 +0000 (13:16 -0800)]
StreamCopyThread: Remove unnecessary flushCount

StreamCopyThread#run consistently interrupts itself whenever it
discovers it has been interrupted by StreamCopyThread#flush while not
reading.  The flushCount is not needed to avoid lost flushes.

All in-tree users of StreamCopyThread never flush.  As a nice side
benefit, this avoids the expense of atomic operations that have no
purpose for those users.

Change-Id: I1afe415cd09a67f1891c3baf712a9003ad553062

8 years agoMerge "Switch JSchSession to simple isolated OutputStream"
Shawn Pearce [Sun, 13 Nov 2016 21:13:02 +0000 (16:13 -0500)]
Merge "Switch JSchSession to simple isolated OutputStream"

8 years agoGet rid of SoftReference in RepositoryCache 43/84743/2
Hugo Arès [Wed, 9 Nov 2016 13:49:41 +0000 (08:49 -0500)]
Get rid of SoftReference in RepositoryCache

Now that RepositoryCache have a time based eviction strategy, get rid
of the strategy to evict cache entries if heap memory is running low,
i.e. soft references. Main reason why time based eviction was
implemented was to offer an alternative to the unpredictable soft
references.

Relying on soft references is not working, especially in large heap. The
JVM GC will consider collecting soft references as last resort before
throwing an out of memory error. For example, an application like Gerrit
configured with a 128GB heap, GC will wait until all 128GB is filled
before collecting the soft references so the application will be
suffering long pauses caused by GC for a long time already. In other
words, you will have to restart application because it's unusable before
JVM eviction kicks in.

Keeping the SoftReference in RepositoryCache is causing more harm than
good. If you use the time based eviction (which is the default strategy)
and want to tune JVM to release soft references more aggressively, it
will release repositories from the cache even though they are not
expired which defeats the purpose of the repository cache.

Gerrit uses Lucene library which uses soft references and this is
causing a "memory leak" except if you configure JVM to release soft
references more aggressively which have the nasty side effect of
evicting non expired repositories from the cache.

Change-Id: I9940bd800464c7f007696d0ccde52ea617b2ebce
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
8 years agoSwitch JSchSession to simple isolated OutputStream 34/84934/4
Shawn Pearce [Sun, 13 Nov 2016 01:06:39 +0000 (17:06 -0800)]
Switch JSchSession to simple isolated OutputStream

Work around issues with JSch not handling interrupts by
isolating the JSch interactions onto another thread.

Run write and flush on a single threaded Executor using
simple Callable operations wrapping the method calls,
waiting on the future to determine the outcome before
allowing the caller to continue.

If any operation was interrupted the state of the stream
becomes fuzzy at close time. The implementation tries to
interrupt the pending write or flush, but this is very
likely to corrupt the stream object, so exceptions are
ignored during such a dirty close.

Change-Id: I42e3ba3d8c35a2e40aad340580037ebefbb99b53

8 years agoWalkEncryption: Cleanup Java 8 support 36/84936/2
Shawn Pearce [Sun, 13 Nov 2016 07:01:13 +0000 (23:01 -0800)]
WalkEncryption: Cleanup Java 8 support

Java 8 is now the minimum for JGit, so Java 7
only paths are not necessary.

Change-Id: I0151625fed4d0da95321ebed5cca648b8c29d5f1

8 years agoReduce synchronized scope around ConcurrentHashMap 65/84565/2
Philipp Marx [Sat, 12 Nov 2016 10:11:19 +0000 (11:11 +0100)]
Reduce synchronized scope around ConcurrentHashMap

Change-Id: I982a78070efb6bc2d3395330456d62e0d5ce6da7
Signed-off-by: Philipp Marx <smigfu@googlemail.com>
8 years agoCheck that DfsBlockCache#blockSize is a power of 2 69/84569/5
Philipp Marx [Fri, 11 Nov 2016 09:43:09 +0000 (10:43 +0100)]
Check that DfsBlockCache#blockSize is a power of 2

In case a value is used which isn’t a power of 2 there will be a high
chance of java.lang.ArrayIndexOutBoundsException and
org.eclipse.jgit.errors.CorruptObjectException due to a mismatching
assumption for the DfsBlockCache#blockSizeShift parameter.

Change-Id: Ib348b3704edf10b5f93a3ffab4fa6f09cbbae231
Signed-off-by: Philipp Marx <smigfu@googlemail.com>
8 years agoFix loop in auto gc 28/84628/1
Matthias Sohn [Mon, 7 Nov 2016 21:31:10 +0000 (22:31 +0100)]
Fix loop in auto gc

* GC.tooManyLooseObjects() always responded true since the loop missed
to advance the iterator so it always incremented until the threshold was
exceeded.
* Also fix loop exit criterion which was off by 1.
* Add some tests.

Change-Id: I70976dfaa026efbcf3c46bd45941f37277a18e04
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoUpdate buck to latest version 58/84458/2
David Pursehouse [Fri, 4 Nov 2016 11:09:00 +0000 (20:09 +0900)]
Update buck to latest version

Update to the same version used on Gerrit's master branch.

Change-Id: I20e4edd099a095c42f23df8cc57241efad2de2ce
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoStreamCopyThread: Do not drop data when flush is observed before writing 13/84513/2
Jonathan Nieder [Fri, 4 Nov 2016 22:59:32 +0000 (15:59 -0700)]
StreamCopyThread: Do not drop data when flush is observed before writing

StreamCopyThread.flush was introduced in
61645b938bc934fda3b0624c5bac1e3495634750 (Add timeouts to smart
transport clients, 2009-06-19) to support timeouts on write in JSch.
The commit message from that change explains:

   JSch made a timeout on write difficult because they explicitly do
   a catch for InterruptedException inside of their OutputStream.  We
   have to work around that by creating an additional thread that just
   shuttles data between our own OutputStream and the real JSch stream.

The code that runs on that thread is structured as follows:

while (!done) {
int n = src.read(buf);
dst.write(buf, 0, n);
}

with src being a PipedInputStream representing the data to be written
to JSch.  To add flush support, that change wanted to add an extra step

if (wantFlush)
dst.flush();

but to handle the case where the thread is blocked in the read() call
waiting for new input, it needs to interrupt the read. So that is how
it works: the caller runs

pipeOut.write(some data);
pipeOut.flush();
copyThread.flush();

to write some data and force it to flush by interrupting the read.

After the pipeOut.flush(), the StreamCopyThread reads the data that was
written and prepares to copy it out.  If the copyThread.flush() call
interrupts the copyThread before it acquires writeLock and starts
writing, we throw away the data we just read to fulfill the flush.
Oops.

Noticed during the review of e67d59df3fb8ae1efe94a54efce36784f7cc83e8
(StreamCopyThread: Do not let flush interrupt a write, 2016-11-04),
which introduced this bug.

Change-Id: I4aceb5610e1bfb251046097adf46bca54bc1d998

8 years agoStreamCopyThread: Do not let flush interrupt a write 97/84497/2
Jonathan Nieder [Fri, 4 Nov 2016 18:48:38 +0000 (11:48 -0700)]
StreamCopyThread: Do not let flush interrupt a write

flush calls interrupt() to interrupt a pending read and trigger a
flush.  Unfortunately that interrupt() call can also interrupt a
pending write, putting Jsch in a bad state and triggering "Short read
of block" errors.  Add locking to ensure the flush only interrupts
reads as intended.

Change-Id: Ib105d9e107ae43549ced7e6da29c22ee41cde9d8

8 years agoFix flush call race condition in StreamCopyThread 61/84261/1
Zhen Chen [Mon, 31 Oct 2016 21:27:36 +0000 (14:27 -0700)]
Fix flush call race condition in StreamCopyThread

If there was a new flush() call during flush previous bytes, we need to
catch it in order to process the new bytes between the two flush()
calls instead of going to last catch IOException clause and end the
thread.

Change-Id: Ibc58a1fa97559238c13590aedbb85e482d85e465
Signed-off-by: Zhen Chen <czhen@google.com>
8 years agoDon't serialize internal hash collision chain link 64/83764/2
Thomas Wolf [Mon, 24 Oct 2016 07:29:30 +0000 (09:29 +0200)]
Don't serialize internal hash collision chain link

ObjectId is serializable, and so are its subtypes. Ensure that
serialization does not follow the hash collision chain internal to the
ObjectIdOwnerMap, otherwise completely unrelated objects may get
serialized when a RevObject is serialized.

Note that serializing a RevCommit or RevTag may serialize quite a few
objects due to the parent/object links they contain. A user has no real
control over how many objects will be written when a RevCommit is
serialized. C.f [1]. This change does not resolve that, but in any case
this internal hash collision chain link should not participate in
serialization.

[1] https://github.com/gitblit/gitblit/pull/1141

Change-Id: Ice331a9dc80a59ca360fcc04adaff8b5e750d847
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
8 years agoUse AtomicObjectOutputStream in CleanFilter 80/83980/1
Matthias Sohn [Wed, 26 Oct 2016 20:33:49 +0000 (22:33 +0200)]
Use AtomicObjectOutputStream in CleanFilter

Enhance and use AtomicObjectOutputStream to write temporary files in
CleanFilter.

Change-Id: I28987dad18255a9067344f94b4e836cbd183e4b1
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoCleanFilter: use atomic move to move temporary file to media file 79/83979/1
Matthias Sohn [Wed, 26 Oct 2016 20:29:23 +0000 (22:29 +0200)]
CleanFilter: use atomic move to move temporary file to media file

Change-Id: I227a0ed6e4e15ac3d96f96a6cefcaf55680ad8bb
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix temporary file leak in CleanFilter 78/83978/1
Matthias Sohn [Wed, 26 Oct 2016 20:31:50 +0000 (22:31 +0200)]
Fix temporary file leak in CleanFilter

The CleanFilter leaked temporary files when a media file already existed
before running clean filter.

Change-Id: Ie20fce3f40d34095ce58e596d25d8d64fe0cde99
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoUse AnyLongObjectId instead of LongObjectId in LFS API 77/83977/1
Matthias Sohn [Wed, 26 Oct 2016 20:27:44 +0000 (22:27 +0200)]
Use AnyLongObjectId instead of LongObjectId in LFS API

Change-Id: I083ad1ea3e8d3685df7c306854c2498c92b05ffb
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoSpeedup CleanFilter by transferring data in chunks of 8k 79/83779/3
Matthias Sohn [Mon, 24 Oct 2016 11:26:58 +0000 (13:26 +0200)]
Speedup CleanFilter by transferring data in chunks of 8k

Transferring data byte per byte is slow, running add with CleanFilter on
a 2.9MB file takes 20 seconds. Using a buffer of 8k shrinks this time to
70ms.

Change-Id: I3bc2d8c11fe6cfaffcc99dc2a00643e01ac4e9cc
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAdd missing @since tag for new protected field in ObjectReader 89/83789/1
Matthias Sohn [Mon, 24 Oct 2016 14:05:24 +0000 (16:05 +0200)]
Add missing @since tag for new protected field in ObjectReader

Change-Id: I93d67d7fd2fde55be39480944d9d7072dbb6c600
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMake streamFileThreshold configurable 01/70601/4
Kevin Corcoran [Wed, 13 Apr 2016 22:55:08 +0000 (15:55 -0700)]
Make streamFileThreshold configurable

Previously, the streamFileThreshold, the threshold at which a file
would be streamed rather than loaded entirely into memory, was only
configurable on a global basis.

This commit makes this threshold configurable on a per-loader basis.

Bug: 490404
Change-Id: I492c18c3155dbf56eedda9044a61d76120fd75f9
Signed-off-by: Kevin Corcoran <kevin.corcoran@puppetlabs.com>
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoMerge "Preserve backslashes within double quotes in CLIGitCommand::split()"
David Pursehouse [Sun, 23 Oct 2016 23:18:37 +0000 (19:18 -0400)]
Merge "Preserve backslashes within double quotes in CLIGitCommand::split()"

8 years agoPreserve backslashes within double quotes in CLIGitCommand::split() 52/73352/2
Rüdiger Herrmann [Sat, 21 May 2016 13:19:24 +0000 (15:19 +0200)]
Preserve backslashes within double quotes in CLIGitCommand::split()

Change-Id: Ia6a56512baa6a0f27e2eef1b19ebb60291ba377f
Signed-off-by: Rüdiger Herrmann <ruediger.herrmann@gmx.de>
8 years agoMove constants used for config-files to ConfigConstants 86/83686/3
Christian Halstrick [Thu, 20 Oct 2016 14:13:24 +0000 (16:13 +0200)]
Move constants used for config-files to ConfigConstants

Change-Id: I7d8db4bfa1a851afd599bb8eaa8f8273204d2e1d

8 years agoImplement auto gc 14/70714/7
Matthias Sohn [Wed, 13 Apr 2016 12:54:09 +0000 (14:54 +0200)]
Implement auto gc

With the auto option, gc checks whether any housekeeping is required; if
not, it exits without performing any work. Some JGit commands run gc
--auto after performing operations that could create many loose objects.
Housekeeping is required if there are too many loose objects or too many
packs in the repository.

If the number of loose objects exceeds the value of the gc.auto option
jgit's GC consolidates all existing packs into a single pack (equivalent
to -A option), whereas git-core would combine all loose objects into a
single pack using repack -d -l. Setting the value of gc.auto to 0
disables automatic packing of loose objects.

If the number of packs exceeds the value of gc.autoPackLimit, then
existing packs (except those marked with a .keep file) are consolidated
into a single pack by using the -A option of repack. Setting
gc.autoPackLimit to 0 disables automatic consolidation of packs.

Like git the following jgit commands run auto gc:
- fetch
- merge
- rebase
- receive-pack

The auto gc for receive-pack can be suppressed by setting the config
option receive.autogc = false

Change-Id: I68a2a051b39ec2c53cb7c4b8f6c596ba65eeba5d
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoCheckoutCommand: Add method to add multiple paths 36/83736/1
David Pursehouse [Sat, 22 Oct 2016 01:11:54 +0000 (10:11 +0900)]
CheckoutCommand: Add method to add multiple paths

The new method addPaths(List<String>) allows callers to add multiple
paths without having to iterate over several calls to addPath(String).

Change-Id: I2c3746a97ead7118fb0ed5543a2c843224719031
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoCheckout: Add the ability to checkout all paths. 81/79981/2
Ned Twigg [Fri, 18 Mar 2016 09:46:38 +0000 (02:46 -0700)]
Checkout: Add the ability to checkout all paths.

Change-Id: Ie1e59c566b63d0dfac231e44e7ebd7f3f08f3e9f
Signed-off-by: Ned Twigg <ned.twigg@diffplug.com>
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoFix possible SIOOBE in RefDirectory.parsePackedRefs 17/79417/4
Marc Strapetz [Mon, 22 Aug 2016 07:53:18 +0000 (09:53 +0200)]
Fix possible SIOOBE in RefDirectory.parsePackedRefs

This SIOOBE happens reproducibly when trying to access
a repository containing Cygwin symlinks

Change-Id: I25f103fcc723bac7bfaaeee333a86f11627a92c7
Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoTransportBundleFile: Resolve remote repository locally 02/77802/4
Thomas Meyer [Fri, 22 Jul 2016 05:51:50 +0000 (07:51 +0200)]
TransportBundleFile: Resolve remote repository locally

Remove the assumption that the local repository is a file based one.

Change-Id: I8f10fe7a54e9fc07f2a23d7901e52b65aa570d45
Signed-off-by: Thomas Meyer <thomas.mey@web.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoTreeFormatter: disallow empty filenames in trees 46/81946/6
David Turner [Mon, 26 Sep 2016 20:41:19 +0000 (16:41 -0400)]
TreeFormatter: disallow empty filenames in trees

Git barfs on these (and they don't make any sense), so we certainly
shouldn't write them.

Change-Id: I3faf8554a05f0fd147be2e63fbe55987d3f88099
Signed-off-by: David Turner <dturner@twosigma.com>
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoAdd "concurrencyLevel" option to DfsBlockCache 57/82857/3
Philipp Marx [Mon, 10 Oct 2016 15:27:28 +0000 (17:27 +0200)]
Add "concurrencyLevel" option to DfsBlockCache

Allow for higher concurrency on DfsBlockCache by adding a configuration
for number of estimated concurrent requests.

Change-Id: Ia65e58ecb2c459b6d9c9697a2f715d933270f7e6
Signed-off-by: Philipp Marx <smigfu@googlemail.com>
8 years agoDiffCommandTest: Don't call toString on String instances 90/83490/2
David Pursehouse [Wed, 19 Oct 2016 05:03:27 +0000 (14:03 +0900)]
DiffCommandTest: Don't call toString on String instances

Change-Id: Ib308b3498593d595b3d8741a9b2d241bbc7441c3
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoFileNameMatcherTest: Use Character.valueOf rather than new Character 89/83489/2
David Pursehouse [Wed, 19 Oct 2016 05:00:18 +0000 (14:00 +0900)]
FileNameMatcherTest: Use Character.valueOf rather than new Character

Change-Id: I9d6e20a258d34ae1d2700fbe8e6c6e3b0ba94424
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoArchiveTest: Don't use string concatenation in loop 86/83486/2
David Pursehouse [Wed, 19 Oct 2016 03:54:46 +0000 (12:54 +0900)]
ArchiveTest: Don't use string concatenation in loop

According to FindBugs:

  In each iteration, the String is converted to a StringBuffer/
  StringBuilder, appended to, and converted back to a String. This
  can lead to a cost quadratic in the number of iterations, as the
  growing string is recopied in each iteration.

Replace string concatenation with StringBuffer.

Change-Id: I60e09f274bed6722f4e0e4d096b0f2b1b31ec1b4
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoCLIRepositoryTestCase: Remove unused 'trash' member 85/83485/1
David Pursehouse [Wed, 19 Oct 2016 03:51:14 +0000 (12:51 +0900)]
CLIRepositoryTestCase: Remove unused 'trash' member

Change-Id: I813f3de5f059e6e5cd34af20fce1e117bfe55b55
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoMerge branch 'stable-4.5' 84/83484/1
David Pursehouse [Wed, 19 Oct 2016 02:45:05 +0000 (11:45 +0900)]
Merge branch 'stable-4.5'

* stable-4.5:
  Config: do not add spaces before units

Change-Id: I54185f54e6d78d7aac873ee5f990f09582318857
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoConfig: do not add spaces before units 83/83483/1
David Turner [Fri, 14 Oct 2016 20:44:51 +0000 (16:44 -0400)]
Config: do not add spaces before units

Adding a space before the unit ('g', 'm', 'k) causes git to fail with
the error:

  fatal: bad numeric config value

Change-Id: I57f11d3a1cdcca4549858e773af1a2a80fc0369f
Signed-off-by: David Turner <dturner@twosigma.com>
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoUse valueOf rather than constructor for Integer and Boolean 11/83411/2
David Pursehouse [Tue, 18 Oct 2016 05:05:45 +0000 (14:05 +0900)]
Use valueOf rather than constructor for Integer and Boolean

Change-Id: I1c65b2e40ba6ec5860903b11b4631e014f3dc5ce
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoFS: Fix lazy initialization of non-volatile static field 10/83410/2
David Pursehouse [Tue, 18 Oct 2016 04:51:27 +0000 (13:51 +0900)]
FS: Fix lazy initialization of non-volatile static field

The 'factory' field is lazy initialized in the detect() method.

According to FindBugs:

   Because the compiler or processor may reorder instructions, threads
   are not guaranteed to see a completely initialized object, if the
   method can be called by multiple threads.

Fix this by declaring the member as 'volatile'.

Change-Id: Ib32663bb28c9564584256e01f625b4e7875e6223
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoPackOutputStream: Add comment for intentional use of non-short-circuit logic 09/83409/2
David Pursehouse [Tue, 18 Oct 2016 04:43:41 +0000 (13:43 +0900)]
PackOutputStream: Add comment for intentional use of non-short-circuit logic

To avoid that people try to "fix" it.

Change-Id: Ib4b35e357e4c068a17243ebd2d57b058c54d5834
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoGit{Add|Clone}Task: Catch specific exceptions rather than Exception 08/83408/3
David Pursehouse [Tue, 18 Oct 2016 04:17:26 +0000 (13:17 +0900)]
Git{Add|Clone}Task: Catch specific exceptions rather than Exception

Change-Id: If3db5a1375485e97f9811546e310e441475db1a6
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoMain: Add missing $NON-NLS tag 07/83407/2
David Pursehouse [Tue, 18 Oct 2016 04:13:37 +0000 (13:13 +0900)]
Main: Add missing $NON-NLS tag

Change-Id: I030910b88a8f60ca174e38f0a213959f9b0a776f
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoStatus: remove unused lineFormat member 38/83338/2
David Pursehouse [Mon, 17 Oct 2016 07:20:05 +0000 (16:20 +0900)]
Status: remove unused lineFormat member

Change-Id: I3c4d83583edb1a6e1fbee1ea496dcf93302831b3
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoLfsStore: Don't invoke toString on String variable 37/83337/2
David Pursehouse [Mon, 17 Oct 2016 07:18:22 +0000 (16:18 +0900)]
LfsStore: Don't invoke toString on String variable

Change-Id: I15d234e5d907d0bbb22a95cf781e915798bead30
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoUpgrade buck to 7b7817c48f30687781040b2b82ac9218d5c4eaa4 68/81668/5
David Pursehouse [Thu, 22 Sep 2016 09:26:28 +0000 (11:26 +0200)]
Upgrade buck to 7b7817c48f30687781040b2b82ac9218d5c4eaa4

Upgrade to match the version used on Gerrit's master branch.

Requires a couple of modifications to make the tests work:

- Remove source_under_test parameters from java_test calls.

- Add vm_args with explicit setting of tmpdir location for http
  tests. This is needed due to upstream changes in temporary
  directory handling [1].

[1] https://github.com/facebook/buck/issues/946

Change-Id: I5d5dd5edc335d44b118e8587f69ba89b83fc7fbb
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoMerge "Fix JGit CLI to follow native git's interpretation of http_proxy..."
Christian Halstrick [Mon, 17 Oct 2016 06:41:17 +0000 (02:41 -0400)]
Merge "Fix JGit CLI to follow native git's interpretation of http_proxy..."

8 years agoFix JGit CLI to follow native git's interpretation of http_proxy... 16/83216/2
Christian Halstrick [Fri, 14 Oct 2016 12:20:40 +0000 (14:20 +0200)]
Fix JGit CLI to follow native git's interpretation of http_proxy...

Native git (as many other tools) interprets the environment variables
http_proxy, HTTP_PROXY, ... in a specific way. "http_proxy" has to be
lowercase while "https_proxy" can be lowercase or uppercase (means:
"HTTPS_PROXY"). Lowercase has precedence. This can be looked up in
"ENVIRONMENT" section of [1]. Teach JGit CLI to behave similar.

Additionally teach JGit not to interpret the environment variables if
the java process was explicitly started with the system properties
telling JVM which proxy to use. A call like "http_proxy=proxy1 java
-Dhttp.proxyHost=proxy2 ..." should use proxy2 as proxy.

[1] https://curl.haxx.se/docs/manpage.html

Change-Id: I2ad78f209792bf8f1285cf2f8ada8ae0c28f8e5a

8 years agoMerge branch 'stable-4.5' 67/83167/1
Matthias Sohn [Thu, 13 Oct 2016 22:04:05 +0000 (00:04 +0200)]
Merge branch 'stable-4.5'

* stable-4.5:
  Unconditionally close repositories in RepositoryCache.clear()
  Fix eviction of repositories with negative usage count

Adapt to parameter removed from
RepositoryCache.unregisterAndCloseRepository().

Change-Id: I7087667056ced401a3b3a027977f2715cd77a1c5
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoUnconditionally close repositories in RepositoryCache.clear() 34/82934/5
Matthias Sohn [Tue, 11 Oct 2016 13:28:41 +0000 (15:28 +0200)]
Unconditionally close repositories in RepositoryCache.clear()

Earlier we tried to close the repository before removing it from the
cache, so close only reduced refcount but didn't close it.

Now that we no longer leak usage count on purpose and the usage count is
now ignored anyway, there is no longer a need to run the removal twice.

Change-Id: I8b62cec6d8a3e88c096d1f37a1f7f5a5066c90a0
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoHttpClientConnection: Register connection socket factory for http 03/83103/1
Matthias Sohn [Thu, 13 Oct 2016 10:27:22 +0000 (12:27 +0200)]
HttpClientConnection: Register connection socket factory for http

It is necessary to register a socket connection factory to prevent the
"http protocol is not supported" error when connecting over a proxy.

Change-Id: Iedf554acef841f52c1f2e3401ef0a0583ac5253b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAdd dependency to org.apache.commons.logging used by Apache HttpClient 02/83102/1
Matthias Sohn [Thu, 13 Oct 2016 10:29:25 +0000 (12:29 +0200)]
Add dependency to org.apache.commons.logging used by Apache HttpClient

Without this dependency running JGit CLI in Eclipse will hit
ClassNotFoundExceptions when HttpClient is trying to log something.

Change-Id: I2d50d9a18fac4c302de2c3a16c07f90ce3e5072e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoContent type constants used in lfs should be final 52/82952/2
Matthias Sohn [Tue, 11 Oct 2016 14:18:27 +0000 (16:18 +0200)]
Content type constants used in lfs should be final

Change-Id: Ia56a9f58e336c25255a81d9402e198e5ce5da442
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAmazonS3: ensure that errorStream is closed 23/82923/2
Matthias Sohn [Tue, 11 Oct 2016 12:17:46 +0000 (14:17 +0200)]
AmazonS3: ensure that errorStream is closed

Change-Id: I2abde5dbd4b785d70b7bc0b77188c0a075130eeb
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "Add toString() to CherryPickCommand and ResetCommand"
Matthias Sohn [Wed, 12 Oct 2016 12:38:30 +0000 (08:38 -0400)]
Merge "Add toString() to CherryPickCommand and ResetCommand"

8 years agoFix eviction of repositories with negative usage count 18/83018/1
Hugo Arès [Wed, 12 Oct 2016 10:54:52 +0000 (06:54 -0400)]
Fix eviction of repositories with negative usage count

If the repository close method was called twice (or more) for one open,
the usage count became negative and the repository was never be evicted
from the cache because the method checking if repository is expired was
not considering negative usage count.

Change-Id: I18a80c415c54c37d1b9def2b311ff2d0afa455ca
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
8 years agoMerge branch 'stable-4.5' 82/82882/1
Matthias Sohn [Mon, 10 Oct 2016 22:34:42 +0000 (00:34 +0200)]
Merge branch 'stable-4.5'

* stable-4.5:
  pgm: Fix misspelled key of an externalized string
  Add missing online help for Ketch server type option in CLI daemon
  Remove wrong junit dependencies in org.eclipse.jgit.pgm

Change-Id: I9cac024c0b488101b539c713b0f5ffc8c01b55bd
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix symlink content comparison on MacOS in tree walk 16/63116/8
Thomas Wolf [Mon, 21 Dec 2015 18:43:56 +0000 (19:43 +0100)]
Fix symlink content comparison on MacOS in tree walk

Symlinks on MacOS are written as UTF-8 NFD, but
readSymbolicLink().toString() converts to NFC with potentially fewer
bytes. May occur in particular if the link target has non-ASCII
characters for which the NFC and NFD encodings differ. This may lead
to an EOFException: Short read of block.

This causes all kinds of weird effects in EGit, ranging from failing
rebases (which report the exception to the user) to EGit decorations in
the navigator silently disappearing (and never coming back).

* Rename readContentAsNormalizedString() to readSymlinkTarget() as it's
  called only for symlinks. Also make it protected.
* Fix by allowing the read to succeed even if less than the expected
  number of bytes are returned by the entry's input stream.
* Override in FileTreeIterator to use fs.readSymlink() directly.

Includes a new MacOS-only test.

Change-Id: I264c5972d67b1cbb1ed690580f5706e671b9affd
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "Fix CheckoutCommand to return updated files even on NONDELETED status"
Christian Halstrick [Mon, 10 Oct 2016 14:19:07 +0000 (10:19 -0400)]
Merge "Fix CheckoutCommand to return updated files even on NONDELETED status"

8 years agoAdd toString() to CherryPickCommand and ResetCommand 08/82808/1
Matthias Sohn [Sun, 9 Oct 2016 21:46:39 +0000 (23:46 +0200)]
Add toString() to CherryPickCommand and ResetCommand

Change-Id: Ie2dd87943350e3b0a2df72a70e5219139d110a8f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agopgm: Fix misspelled key of an externalized string 63/81863/2
Matthias Sohn [Sun, 25 Sep 2016 09:46:09 +0000 (11:46 +0200)]
pgm: Fix misspelled key of an externalized string

Bug: 502107
Change-Id: I76d0981c8463b63bd049f50cdc7d549fa0604b3c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>