]> source.dussan.org Git - jgit.git/log
jgit.git
12 years agoMerge branch 'stable-1.2' 38/4838/1
Matthias Sohn [Fri, 16 Dec 2011 07:49:59 +0000 (08:49 +0100)]
Merge branch 'stable-1.2'

* stable-1.2:
  Add API checking using clirr
  Fix MergeCommandTest to pass if File.executable is not supported
  Fix ResolveMerger not to add paths with FileMode 0

Change-Id: I86e7194a40acd6dfa3d433f1d17c01bdf5bb0d9c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
12 years agoMerge "Fix MergeCommandTest to pass if File.executable is not supported" into stable-1.2
Matthias Sohn [Thu, 15 Dec 2011 23:58:48 +0000 (18:58 -0500)]
Merge "Fix MergeCommandTest to pass if File.executable is not supported" into stable-1.2

12 years agoAdd API checking using clirr 31/4831/3
Matthias Sohn [Thu, 15 Dec 2011 23:50:46 +0000 (15:50 -0800)]
Add API checking using clirr

In order to generate API reports run: mvn clirr:clirr

The reports are generated to the folder
target/site/clirr-report.html under the respective
project.

In order to check API compatibility and fail the build
on incompatible changes run: mvn clirr:check

For now we compare the API against the latest release
1.1.0.201109151100-r.

Bug: 336849
Change-Id: I21baaf3a6883c5b4db263f712705cc7b8ab6d888
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Signed-off-by: Kevin Sawicki <kevin@github.com>
12 years agoFix MergeCommandTest to pass if File.executable is not supported 30/4830/1
Robin Rosenberg [Thu, 15 Dec 2011 22:33:00 +0000 (23:33 +0100)]
Fix MergeCommandTest to pass if File.executable is not supported

Change-Id: If11080ed6e53d9df88a1ae42f48ee8914d54669b

12 years agoFire DfsPacksChangedEvents when committing packs. 07/4807/2
Dave Borowitz [Tue, 13 Dec 2011 19:00:19 +0000 (11:00 -0800)]
Fire DfsPacksChangedEvents when committing packs.

Once a pack has been committed with commitPack(), we know that the pack
list has changed but we don't re-scan the underlying storage.

Change-Id: Ia7b35df4442a5f5dfe7e817edcc77b44b5410d08

12 years agoStatusCommand#setWorkingTreeIt should return 'this' 91/4791/2
Tomasz Zarna [Mon, 12 Dec 2011 17:21:15 +0000 (09:21 -0800)]
StatusCommand#setWorkingTreeIt should return 'this'

All setters for JGit API commands return the command instance, follow
the builder pattern.

Change-Id: Id2bbc3f1300bb179887c4d2d6dd72925bde55f24
Signed-off-by: Kevin Sawicki <kevin@github.com>
12 years agoFix ResolveMerger not to add paths with FileMode 0 57/4757/7
Christian Halstrick [Fri, 9 Dec 2011 10:17:59 +0000 (11:17 +0100)]
Fix ResolveMerger not to add paths with FileMode 0

When ResolveMerger finds a path where it has to do a content merge it
will try the content merge and if that succeeds it'll add the newly
produced content to the index. For the FileMode of this new index entry
it blindly copies the FileMode it finds for that path in the common base
tree. If by chance the common base tree does not contain this path it'll
try to add FileMode 0 (MISSING) to the index.

One could argue that this can't happen: how can the ResolveMerger
successfully (with no conflicts) merge two contents if there is no
common base? This was due to another bug in ResolveMerger. It failed to
find out that for two files which differ only in the FileMode (e.g. 644
vs. 755) it should not try a content merge.

Change-Id: I7a00fe1a6c610679be475cab8a3f8aa4c08811a1
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
12 years agoPrepare 1.3.0 builds 78/4778/1
Matthias Sohn [Fri, 9 Dec 2011 23:50:21 +0000 (00:50 +0100)]
Prepare 1.3.0 builds

Change-Id: I7a1ae73783c95041b59f047a7330e62e7f642149
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
12 years agoMerge branch 'stable-1.2' 77/4777/1
Matthias Sohn [Sat, 10 Dec 2011 00:06:47 +0000 (01:06 +0100)]
Merge branch 'stable-1.2'

* stable-1.2:
  Fix version.sh
  Throw API exception when MergeCommand hits checkout conflicts
  Add methods for configuring platform emulation
  Fix history rendering not to occupy too many lanes
  Fix History rendering

Change-Id: If71cc760423ae2b76c7435ca4830edc1745556de
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
12 years agoFix version.sh 76/4776/1
Matthias Sohn [Fri, 9 Dec 2011 23:49:39 +0000 (00:49 +0100)]
Fix version.sh

Change-Id: Icdf5d9ea3ca62839cbf7de13dfee9682056b7cef
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
12 years agoMerge "Add simple chain implementations of transport hooks and loggers"
Shawn Pearce [Fri, 9 Dec 2011 17:23:23 +0000 (12:23 -0500)]
Merge "Add simple chain implementations of transport hooks and loggers"

12 years agoAdd simple chain implementations of transport hooks and loggers 69/4769/3
Dave Borowitz [Thu, 8 Dec 2011 16:21:01 +0000 (08:21 -0800)]
Add simple chain implementations of transport hooks and loggers

Allows callers to effectively run multiple hooks and loggers without
modifying the UploadPack/ReceivePack interface.

Change-Id: I5b388816b63036ffff08ef3a9b857ccb764cb8c4

12 years agoMerge "Force jgit.sh to use UTF-8 encoding on Mac"
Shawn Pearce [Fri, 9 Dec 2011 15:11:30 +0000 (10:11 -0500)]
Merge "Force jgit.sh to use UTF-8 encoding on Mac"

12 years agoMerge changes I9f1842c2,Ie139133b
Shawn Pearce [Fri, 9 Dec 2011 15:04:03 +0000 (10:04 -0500)]
Merge changes I9f1842c2,Ie139133b

* changes:
  Throw invalid ref exception instead of invalid remote exception
  Use constant for logs directory

12 years agoMerge "Add a no-op UploadPackLogger and use it by default"
Shawn Pearce [Fri, 9 Dec 2011 02:44:18 +0000 (21:44 -0500)]
Merge "Add a no-op UploadPackLogger and use it by default"

12 years agoThrow API exception when MergeCommand hits checkout conflicts 52/4752/2
Matthias Sohn [Thu, 8 Dec 2011 22:33:53 +0000 (23:33 +0100)]
Throw API exception when MergeCommand hits checkout conflicts

When MergeCommand hit checkout conflicts it did throw an internal JGit
exception org.eclipse.jgit.errors.CheckoutConflictException instead of
org.eclipse.jgit.api.errors.CheckoutConflictException which it
declares to throw. Hence translate the internal exception to the
exception declared in the API.

Bug: 327573
Change-Id: I1efcd93a43ecbf4a40583e0fc9d8d53cffc98cae
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
12 years agoThrow invalid ref exception instead of invalid remote exception 49/4749/6
Kevin Sawicki [Tue, 6 Dec 2011 18:00:28 +0000 (10:00 -0800)]
Throw invalid ref exception instead of invalid remote exception

ReflogCommand command was throwing an incorrect exception type
when an IOException was wrapped and rethrown from the underlying
ReflogReader.  The IOException cause is now provided to the thrown
exception as well.

Change-Id: I9f1842c2d414d3e9c658843f9b448bc18891748e

12 years agoUse constant for logs directory 47/4747/4
Kevin Sawicki [Tue, 6 Dec 2011 17:37:11 +0000 (09:37 -0800)]
Use constant for logs directory

Change-Id: Ie139133bcbe1ca61c85e86b3484f858bc065821f

12 years agoMerge "Set expected old object id to all zeros when head id is null"
Shawn Pearce [Thu, 8 Dec 2011 18:09:02 +0000 (13:09 -0500)]
Merge "Set expected old object id to all zeros when head id is null"

12 years agoMerge "Use System.arraycopy to copy parent object id array"
Shawn Pearce [Thu, 8 Dec 2011 18:07:21 +0000 (13:07 -0500)]
Merge "Use System.arraycopy to copy parent object id array"

12 years agoMerge "[findBugs] Implement Serializable interface in PlotLane"
Shawn Pearce [Thu, 8 Dec 2011 18:06:03 +0000 (13:06 -0500)]
Merge "[findBugs] Implement Serializable interface in PlotLane"

12 years agoAdd toString() to HunkHeader 66/4766/2
Tomasz Zarna [Thu, 8 Dec 2011 17:11:01 +0000 (18:11 +0100)]
Add toString() to HunkHeader

Since FileHeader provides toString() method (via DiffEntry) we could add
a similar method to HunkHeader.

Change-Id: I7886e5b8f775fa8e8478ac5af37d90b6ef677d8b

12 years ago[findBugs] Implement Serializable interface in PlotLane 70/4770/1
Kevin Sawicki [Thu, 8 Dec 2011 16:41:10 +0000 (08:41 -0800)]
[findBugs] Implement Serializable interface in PlotLane

This class is referenced by PlotCommit which is Serializable

Change-Id: If79b6a593dc53fbb7c4f0a69a9d0dca02a8cb63c

12 years agoAdd a no-op UploadPackLogger and use it by default 68/4768/2
Dave Borowitz [Thu, 8 Dec 2011 16:00:39 +0000 (08:00 -0800)]
Add a no-op UploadPackLogger and use it by default

This matches the behavior of the hooks in UploadPack.

Change-Id: I21277e52ee9452237d87084f06bb140dfa6bf608

12 years agoAdd methods for configuring platform emulation 61/4761/1
Robin Rosenberg [Tue, 25 Oct 2011 23:54:54 +0000 (01:54 +0200)]
Add methods for configuring platform emulation

Specifically we support setting system properties for Windows, generic
Unix and current test platform.

Change-Id: Ib02be417c4915350dfec64fda3face1138552871

12 years agoUse System.arraycopy to copy parent object id array 59/4759/1
Kevin Sawicki [Wed, 7 Dec 2011 18:21:41 +0000 (10:21 -0800)]
Use System.arraycopy to copy parent object id array

Change-Id: Iee475584f0a65b8b77610cd277f15295b68dfe80

12 years agoSet expected old object id to all zeros when head id is null 55/4755/2
Kevin Sawicki [Wed, 7 Dec 2011 02:02:30 +0000 (18:02 -0800)]
Set expected old object id to all zeros when head id is null

This will be the case on the initial commit to a repository
and the ref update should expect a non-existent ref

Change-Id: Iaa06e47e6e8cc4a0281c7683b367d4806dd980ea

12 years agoForce jgit.sh to use UTF-8 encoding on Mac 54/4754/1
Robin Rosenberg [Tue, 6 Dec 2011 23:42:35 +0000 (00:42 +0100)]
Force jgit.sh to use UTF-8 encoding on Mac

For some obscure reason the platform encodng in Java on Macs
is MacRoman. OS X used UTF-8 as the default encoding so set
the encoding property in jgit.sh.

Change-Id: I08182c2f8512f799178cee70bcc28d6ee2b9c2b0

12 years agoFix history rendering not to occupy too many lanes 44/4744/2
Christian Halstrick [Tue, 6 Dec 2011 22:10:03 +0000 (23:10 +0100)]
Fix history rendering not to occupy too many lanes

There was a bug in history rendering which caused jgit to use too
many lanes in case lanes get repositioned. Looking at commit
90c11cbaeb83ee9b02238cbd2c0e5bcf68068772 in JGit was one example. Vadim
Dmitriev found the problem and the solution.

Bug: 365460
Change-Id: I6024265b7a593dcfd4fc612d0baf6652a0092ff4
Also-by: Vadim Dmitriev <dmgloss@mail.ru>
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
12 years agoStream left open in WorkingTreeIterator#filterClean 45/4745/1
Tomasz Zarna [Tue, 6 Dec 2011 09:44:52 +0000 (10:44 +0100)]
Stream left open in WorkingTreeIterator#filterClean

Change-Id: I17c2709f2613536c02c9ea2977d936b87029ac0d

12 years agoMerge changes I5381e110,I5534b560
Shawn O. Pearce [Mon, 5 Dec 2011 20:38:41 +0000 (15:38 -0500)]
Merge changes I5381e110,I5534b560

* changes:
  Discard request HTTP bodies for status code <400
  Ensure all smart HTTP errors are sent to clients

12 years agoFix History rendering 35/4735/1
Christian Halstrick [Fri, 2 Dec 2011 13:27:51 +0000 (14:27 +0100)]
Fix History rendering

There was the possibility that during history rendering we draw a lane
"trough" a passed commit. Vadim Dmitriev found that out in bug 335818.
I added the needed check to that block of code where it was missing.

Bug: 335818
Change-Id: Ic944193b2aca55ff3eb0235d46afa60b7896aa0f
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
12 years agoMerge "Always close the GZIPOutputStream to release Deflater"
Robin Rosenberg [Fri, 2 Dec 2011 22:38:05 +0000 (17:38 -0500)]
Merge "Always close the GZIPOutputStream to release Deflater"

12 years agoMerge "Fix History rendering"
Shawn Pearce [Fri, 2 Dec 2011 15:02:49 +0000 (10:02 -0500)]
Merge "Fix History rendering"

12 years agoMerge "Add percent-encoding of reserved characters in URIish"
Shawn Pearce [Fri, 2 Dec 2011 15:01:22 +0000 (10:01 -0500)]
Merge "Add percent-encoding of reserved characters in URIish"

12 years agoAdd percent-encoding of reserved characters in URIish 50/4550/8
Robin Rosenberg [Tue, 29 Nov 2011 23:16:40 +0000 (00:16 +0100)]
Add percent-encoding of reserved characters in URIish

We do this for the the names that have an explicit scheme and
do it both ways. The URIish is parsed before decoding. Only
a few special characters are encoded for the path part of the
URI, i.e. space, non-ASCII and control characters. The percent
encoding is assumed to be a stream encoding so we interpret it
as UTF-8.

Change-Id: I82d1910df9472e21d7212a2b984ff7d8fb2cbf0f

12 years agoFix History rendering 19/4719/1
Christian Halstrick [Fri, 2 Dec 2011 13:27:51 +0000 (14:27 +0100)]
Fix History rendering

There was the possibility that during history rendering we draw a lane
"trough" a passed commit. Vadim Dmitriev found that out in bug 335818.
I added the needed check to that block of code where it was missing.

Bug: 335818
Change-Id: Ic944193b2aca55ff3eb0235d46afa60b7896aa0f
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
12 years agoDiscard request HTTP bodies for status code <400 16/4716/1
Shawn O. Pearce [Thu, 1 Dec 2011 01:36:32 +0000 (17:36 -0800)]
Discard request HTTP bodies for status code <400

The HTTP RFCs require a server to fully consume the request body before
it can return a non-error status code, which is any code below 400.

JGit returns most Git level errors inside of an HTTP 200 OK response,
and sometimes this happens before the entire request was consumed from
the servlet container. In such cases the body must be skipped or read
until EOF is reached, ensuring the HTTP keep-alive semantics will work
for the next request on the same TCP connection.

HTTP status codes >= 400 may be returned without consuming the body,
and a servlet container must set "Connection: close" in the response
headers when this happens, since the state of the request body is not
well defined with an early abort.

With the introduction of sendError() in GitSmartHttpTools there are
only a handful of locations that need to worry about the request body
being consumed, so sprinkle the call in as necessary.

Change-Id: I5381e110585f780c01a764df8e27c80aacf5146e

12 years agoEnsure all smart HTTP errors are sent to clients 15/4715/1
Shawn O. Pearce [Thu, 1 Dec 2011 01:28:54 +0000 (17:28 -0800)]
Ensure all smart HTTP errors are sent to clients

Error messages are typically short, below the 32 KiB in-memory buffer
size of the SmartOutputStream. When an error is queued up for sending
to a client and an exception is thrown up into the servlet handler we
discarded the message and sent nothing to the client, as the messages
were stuck inside of the SmartOutputStream buffer.

Hoist the creation of the output stream above the invocation of try
block of the service, and use close() in the few catch blocks that
assume there are buffered messages ready for transmission. This will
ensure errors from unpacking a stream in ReceivePack are sent off to
a client correctly, as previously these were causing no status report
to arrive at the client side as the data was stuck in the buffer.

Change-Id: I5534b560697731121f48979ae077aa7c95b8e39c

12 years agoAlways close the GZIPOutputStream to release Deflater 14/4714/1
Shawn O. Pearce [Thu, 1 Dec 2011 01:17:59 +0000 (17:17 -0800)]
Always close the GZIPOutputStream to release Deflater

The stream must be closed to ensure the native resources associated
with its internal Deflater instance are cleaned up early, instead of
waiting for GC to identify the dead object and finialize it.

Change-Id: Ic31b5df563f19404ed4682556999f4332aa61562

12 years agoFix HTTP unit tests 04/4704/1
Shawn O. Pearce [Thu, 1 Dec 2011 01:40:10 +0000 (17:40 -0800)]
Fix HTTP unit tests

I modified the way errors are returned, and this particular test is
now getting a different access denied response. The new text happens
to be what I intended to have here, so update the test.

Change-Id: I53f8410ca0a52755d80473cd5cbcdb4d8502febf

12 years agoMerge "RepositoryState: add method canAmend"
Christian Halstrick [Wed, 30 Nov 2011 09:55:58 +0000 (04:55 -0500)]
Merge "RepositoryState: add method canAmend"

12 years agoMerge "Always checkout master when it matches the advertised HEAD"
Shawn Pearce [Tue, 29 Nov 2011 02:59:52 +0000 (21:59 -0500)]
Merge "Always checkout master when it matches the advertised HEAD"

12 years agoMerge "Update maven plugin versions"
Shawn Pearce [Tue, 29 Nov 2011 02:51:31 +0000 (21:51 -0500)]
Merge "Update maven plugin versions"

12 years agoMerge "Implement Serializable interface in ReflogEntry"
Shawn Pearce [Tue, 29 Nov 2011 02:50:40 +0000 (21:50 -0500)]
Merge "Implement Serializable interface in ReflogEntry"

12 years agoRemove calls to printStackTrace in catch blocks 91/4691/1
Kevin Sawicki [Tue, 29 Nov 2011 02:07:52 +0000 (18:07 -0800)]
Remove calls to printStackTrace in catch blocks

Change-Id: I7a4179f10a4841e80b6546e1e7662cab71eac5e9

12 years agoUpdate maven plugin versions 89/4689/1
Matthias Sohn [Tue, 29 Nov 2011 00:16:47 +0000 (01:16 +0100)]
Update maven plugin versions

Change-Id: I7400e08a1059f57c85a53aebe2719f81c00f58e8
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
12 years agoImplement Serializable interface in ReflogEntry 88/4688/1
Kevin Sawicki [Tue, 29 Nov 2011 00:14:21 +0000 (16:14 -0800)]
Implement Serializable interface in ReflogEntry

Change-Id: Idf798dd3981bef3dc9e17c13c12809f89089e96f

12 years agoAlways checkout master when it matches the advertised HEAD 87/4687/2
Kevin Sawicki [Mon, 28 Nov 2011 19:00:15 +0000 (11:00 -0800)]
Always checkout master when it matches the advertised HEAD

This parallels the CGit behavior of always using refs/heads/master
when it matches the remote advertised HEAD commit.

Change-Id: I5a5cd1516b58d116e334056aba1ef7990697ec30

12 years agoRepositoryState: add method canAmend 74/4674/3
Jens Baumgart [Mon, 28 Nov 2011 09:46:16 +0000 (10:46 +0100)]
RepositoryState: add method canAmend

The method canAmend was added to RepositoryState. It returns true if
amending the HEAD commit is allowed in the current repository state.

Change-Id: Idd0c4eea83a23c41340789b7b877959b457d951e
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
12 years agoMerge "Reset SSH connection and credentials on "Auth fail""
Shawn Pearce [Sun, 27 Nov 2011 00:24:09 +0000 (19:24 -0500)]
Merge "Reset SSH connection and credentials on "Auth fail""

12 years agoReset SSH connection and credentials on "Auth fail" 76/4676/2
Matthias Sohn [Sun, 27 Nov 2011 00:16:49 +0000 (01:16 +0100)]
Reset SSH connection and credentials on "Auth fail"

When SSH user/password authentication failed this may have been caused
by changed credentials on the server side. When the SSH credentials of a
user change the SSH connection needs to be re-established and
credentials which may have been stored by the credentials provider
need to be reset in order to enable prompting for the new credentials.

Bug: 356233
Change-Id: I7d64c5f39b68a9687c858bb68a961616eabbc751
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
12 years agoDon't iterate over advertised refs when HEAD is null 81/4681/1
Kevin Sawicki [Sat, 26 Nov 2011 22:47:21 +0000 (14:47 -0800)]
Don't iterate over advertised refs when HEAD is null

Moves the check from inside the loop to outside the loop
and returns immediately if the HEAD advertisded ref is null

Change-Id: I539da6cafb4f73610b8e00259e32bd4d57f4f4cc

12 years agoMerge "tools/release: Handle v1.0.0.201106090707-r-NN-gdeadbeef"
Matthias Sohn [Thu, 24 Nov 2011 13:34:50 +0000 (08:34 -0500)]
Merge "tools/release: Handle v1.0.0.201106090707-r-NN-gdeadbeef"

12 years agoMerge "Adapt merge message to C Git for remote-tracking branch"
Shawn Pearce [Wed, 23 Nov 2011 23:09:06 +0000 (18:09 -0500)]
Merge "Adapt merge message to C Git for remote-tracking branch"

12 years agoMerge changes I828ac2de,I80e5b7cf
Shawn O. Pearce [Wed, 23 Nov 2011 23:08:28 +0000 (18:08 -0500)]
Merge changes I828ac2de,I80e5b7cf

* changes:
  Add utilities for smart HTTP error handling
  Strip leading slashes in RepositoryFilter

12 years agoAdapt merge message to C Git for remote-tracking branch 71/4671/1
Robin Stocker [Wed, 23 Nov 2011 16:03:21 +0000 (17:03 +0100)]
Adapt merge message to C Git for remote-tracking branch

Commit 13931236b9ee2895a98ffdbdacbd0f895956d8a8 in C Git (2011-11-02)
changed the message format:

-Merge remote branch 'origin/foo'
+Merge remote-tracking branch 'origin/foo'

This change does the same in EGit to be consistent.

Change-Id: I7d9c5afa95771dbfe6079b5f89a10b248fee0172
Signed-off-by: Robin Stocker <robin@nibor.org>
12 years agoGuard against null branch in PullCommand 68/4668/2
Kevin Sawicki [Wed, 23 Nov 2011 00:29:28 +0000 (16:29 -0800)]
Guard against null branch in PullCommand

Throw a NoHeadException when Repository.getFullBranch
returns null

Bug: 351543
Change-Id: I666cd5b67781508a293ae553c6fe5c080c8f4d99
Signed-off-by: Kevin Sawicki <kevin@github.com>
12 years agoSupport adding all refs to LogCommand 65/4665/3
Kevin Sawicki [Wed, 23 Nov 2011 00:14:30 +0000 (16:14 -0800)]
Support adding all refs to LogCommand

Bug: 353310
Change-Id: Ifa2e7ed58c7f2bdfe3aafbd500b5a38c1f94c2ec
Signed-off-by: Kevin Sawicki <kevin@github.com>
12 years agoAdd utilities for smart HTTP error handling 67/4667/1
Shawn O. Pearce [Tue, 22 Nov 2011 23:51:11 +0000 (15:51 -0800)]
Add utilities for smart HTTP error handling

The GitSmartHttpTools class started as utility functions to help report
useful error messages to users of the android.googlesource.com service.

Now that the GitServlet and GitFilter classes support filters before a
git-upload-pack or git-receive-pack request, server implementors may
these routines helpful to report custom messages to clients.  Using the
sendError() method to return an HTTP 200 OK with error text embedded in
the payload prevents native Git clients from retrying the action with a
dumb Git or WebDAV HTTP request.

Refactor some of the existing code to use these new error functions and
protocol constants.  The new sendError() function is very close to being
identical to the old error handling code in RepositoryFilter, however we
now use the POST Content-Type rather than the Accept HTTP header to check
if the client will accept the error data in the response body rather than
using the HTTP status code.  This is a more reliable way of checking for
native Git clients, as the Accept header was not always populated with the
correct string in older versions of Git smart HTTP.

Change-Id: I828ac2deb085af12b6689c10f86662ddd39bd1a2

12 years agoStrip leading slashes in RepositoryFilter 66/4666/1
Shawn O. Pearce [Tue, 22 Nov 2011 23:18:32 +0000 (15:18 -0800)]
Strip leading slashes in RepositoryFilter

If removing the leading slash results in an empty string, return
with an HTTP 404 error before trying to use the RepositoryResolver.
Moving this into a loop ahead of the length check ensures there is
no empty string passed into the resolver.

Change-Id: I80e5b7cf25ae9f2164b5c396a29773e5c7d7286e

12 years agoMerge "Provide merge result when revert command fails"
Shawn Pearce [Tue, 22 Nov 2011 19:26:08 +0000 (14:26 -0500)]
Merge "Provide merge result when revert command fails"

12 years agomaxObjectSizeLimit for receive-pack. 50/4650/7
Sasa Zivkov [Tue, 22 Nov 2011 16:43:00 +0000 (17:43 +0100)]
maxObjectSizeLimit for receive-pack.

ReceivePack (and PackParser) can be configured with the
maxObjectSizeLimit in order to prevent users from pushing too large
objects to Git. The limit check is applied to all object types
although it is most likely that a BLOB will exceed the limit.  In all
cases the size of the object header is excluded from the object size
which is checked against the limit as this is the size of which a BLOB
object would take in the working tree when checked out as a file.
When an object exceeds the maxObjectSizeLimit the receive-pack will
abort immediately.

Delta objects (both offset and ref delta) are also checked against the
limit. However, for delta objects we will first check the size of the
inflated delta block against the maxObjectSizeLimit and abort
immediately if it exceeds the limit. In this case we even do not know
the exact size of the resolved delta object but we assume it will be
larger than the given maxObjectSizeLimit as delta is generally only
chosen if the delta can copy more data from the base object than the
delta needs to insert or needs to represent the copy ranges. Aborting
early, in this case, avoids unnecessary inflating of the (huge) delta
block.

Unfortunately, it is too expensive (especially for a large delta) to
compute SHA-1 of an object that causes the receive-pack to abort.
This would decrease the value of this feature whose main purpose is to
protect server resources from users pushing huge objects.  Therefore
we don't report the SHA-1 in the error message.

Change-Id: I177ef24553faacda444ed5895e40ac8925ca0d1e
Signed-off-by: Sasa Zivkov <sasa.zivkov@sap.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
12 years agoProvide merge result when revert command fails 61/4661/1
Kevin Sawicki [Tue, 22 Nov 2011 01:14:11 +0000 (17:14 -0800)]
Provide merge result when revert command fails

This allows callers to determine why the revert
did not complete successfully

Change-Id: Ie44bb8523cac388b63748bc69ebdd3c3a3665d06
Signed-off-by: Kevin Sawicki <kevin@github.com>
12 years agoMerge "Add missing '' characters around quoted variables"
Shawn Pearce [Sat, 19 Nov 2011 00:11:47 +0000 (19:11 -0500)]
Merge "Add missing '' characters around quoted variables"

12 years agoFix duplicate objects in "thin+cached" packs from DFS 30/4630/6
Shawn O. Pearce [Wed, 16 Nov 2011 23:04:44 +0000 (15:04 -0800)]
Fix duplicate objects in "thin+cached" packs from DFS

The DfsReader must offer every representation of an object that
exists on the local repository when PackWriter asks for them. This
is necessary to identify objects in the thin pack part that are also
in the cached pack that will be appended onto the end of the stream.

Without looking at all alternatives, PackWriter may pack the same
object twice (once in the thin section, again in the cached base
pack). This may cause the command line C version to go into an
infinite loop when repacking the resulting repository, as it may see
a delta chain cycle with one of those duplicate copies of the object.

Previously the DfsReader tried to avoid looking at packs that it
might not care about, but this is insufficient, as all versions
must be considered during pack generation.

Change-Id: Ibf4a3e8ea5c42aef16404ffc42a5781edd97b18e

12 years agoDo not write edge objects to the pack stream 46/4646/5
Shawn O. Pearce [Thu, 17 Nov 2011 19:23:18 +0000 (11:23 -0800)]
Do not write edge objects to the pack stream

Consider two objects A->B where A uses B as a delta base, and these
are in the same source pack file ordered as "A B".

If cached packs is enabled and B is also in the cached pack that
will be appended onto the end of the thin pack, and both A, B are
supposed to be in the thin pack, PackWriter must consider the fact
that A's base B is an edge object that claims to be part of the
new pack, but is actually "external" and cannot be written first.

If the object reuse system considered B candidates fist this bug
does not arise, as B will be marked as edge due to it existing in
the cached pack. When the A candidates are later examined, A sees a
valid delta base is available as an edge, and will not later try to
"write base first" during the writing phase.

However, when the reuse system considers A candidates first they
see that B will be in the outgoing pack, as it is still part of
the thin pack, and arrange for A to be written first. Later when A
switches from being in-pack to being an edge object (as it is part
of the cached pack) the pointer in B does not get its type changed
from ObjectToPack to ObjectId, so B thinks A is non-edge.

We work around this case by also checking that the delta base B
is non-edge before writing the object to the pack. Later when A
writes its object header, delta base B's ObjectToPack will have
an offset == 0, which makes isWritten() = false, and the OBJ_REF
delta format will be used for A's header. This will be resolved by
the client to the copy of B that appears in the later cached pack.

Change-Id: Ifab6bfdf3c0aa93649468f49bcf91d67f90362ca

12 years agoUse long for more object counts in PackWriter 45/4645/4
Shawn O. Pearce [Thu, 17 Nov 2011 19:39:53 +0000 (11:39 -0800)]
Use long for more object counts in PackWriter

Packs can contain up to 2^32-1 objects, which exceeds the range of a
Java int. Try harder to accept higher object counts in some cases by
using long more often when we are working with the object count value.

This is a trivial refactoring, we may have to make even more changes
to the object handling code to support more than 2^31-1 objects.

Change-Id: I8cd8146e97cd1c738ad5b48fa9e33804982167e7

12 years agoSearch for annotated tag reuse first 44/4644/2
Shawn O. Pearce [Thu, 17 Nov 2011 19:44:43 +0000 (11:44 -0800)]
Search for annotated tag reuse first

Annotated tags are relatively rare and currently are scheduled in a
pack file near the commits, decreasing the time it takes to resolve
client requests reading tags as part of a history traversal.

Putting them first before the commits allows the storage system to
page in the tag area, and have it relatively hot in the LRU when
the nearby commit area gets examined too. Later looking at the
tree and blob data will pollute the cache, making it more likely
the tags are not loaded and would require file IO.

Change-Id: I425f1f63ef937b8447c396939222ea20fdda290f

12 years agoCorrect progress monitor on "Getting sizes:" phase 42/4642/2
Shawn O. Pearce [Thu, 17 Nov 2011 15:21:22 +0000 (07:21 -0800)]
Correct progress monitor on "Getting sizes:" phase

This counter always was running 1 higher, because it incremented
after the queue was exhausted (and every object was processed). Move
increments to be after the queue has provided a result, to ensure
we do not show a higher in-progress count than total count.

Change-Id: I97f815a0492c0957300475af409b6c6260008463

12 years agoRefactor DfsReader selection of cached packs 29/4629/2
Shawn O. Pearce [Wed, 16 Nov 2011 22:52:31 +0000 (14:52 -0800)]
Refactor DfsReader selection of cached packs

Make the code more clear with a simple refactoring of the boolean
logic into a method that describes the condition we are looking
for on each pack file. A cached pack is possible if there exists
a tips collection, and the collection is non-empty.

Change-Id: I4ac42b0622b39d159a0f4f223e291c35c71f672c

12 years agoAdd missing '' characters around quoted variables 24/4624/5
Kevin Sawicki [Wed, 16 Nov 2011 16:04:55 +0000 (08:04 -0800)]
Add missing '' characters around quoted variables

Double ' characters are needed for variables to appear in
single quotes.  Variables surrounded with a s single ' will
not be replaced when formatted

Change-Id: I0182c1f679ba879ca19dd81bf46924f415dc6003
Signed-off-by: Kevin Sawicki <kevin@github.com>
12 years agoMerge changes I366435e2,I64577f8f
Shawn Pearce [Fri, 18 Nov 2011 21:05:27 +0000 (16:05 -0500)]
Merge changes I366435e2,I64577f8f

* changes:
  [findBugs] Silence returning null for StringUtils.toBooleanOrNull()
  [findBugs] Prefer short-cut logic as it's more performant

12 years ago[findBugs] Silence returning null for StringUtils.toBooleanOrNull() 38/4638/1
Matthias Sohn [Wed, 16 Nov 2011 19:47:12 +0000 (20:47 +0100)]
[findBugs] Silence returning null for StringUtils.toBooleanOrNull()

As the method name and its javadoc clearly state that this method can
return null we can ignore this FindBugs warning.

Change-Id: I366435e26eda5d910f5d1a907db51f08efd4bb8c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
12 years ago[findBugs] Prefer short-cut logic as it's more performant 37/4637/1
Matthias Sohn [Wed, 16 Nov 2011 19:54:40 +0000 (20:54 +0100)]
[findBugs] Prefer short-cut logic as it's more performant

Change-Id: I64577f8fd19ee0d2d407479cc70e521adc367f37
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
12 years agoKeep track of a static collection of all PackWriter instances 95/4595/2
Dave Borowitz [Thu, 10 Nov 2011 20:58:13 +0000 (12:58 -0800)]
Keep track of a static collection of all PackWriter instances

Stored in a weak concurrent hash map, which we clean up while iterating.
Usually the weak reference behavior should not be necessary because
PackWriters should be released with release(), but we still want to
avoid leaks when dealing with broken client code.

Change-Id: I337abb952ac6524f7f920fedf04065edf84d01d2

12 years agoEstimate the amount of memory used by a PackWriter 94/4594/2
Dave Borowitz [Thu, 10 Nov 2011 20:53:50 +0000 (12:53 -0800)]
Estimate the amount of memory used by a PackWriter

Memory usage is dominated by three terms:
 - The maximum memory allocated to each delta window.
 - The maximum size of a single file held in memory during delta search.
 - ObjectToPack instances owned by the writer.

For the first two terms, rather than doing complex instrumentation of
the DeltaWindows, we just overestimate based on the config parameters
(though we may underestimate if the maximum size is not set).

For the ObjectToPack instances, we do some rough byte accounting of the
underlying Java object representation.

Change-Id: I23fe3cf9d260a91f1aeb6ea22d75af8ddb9b1939

12 years agoAdd an object encapsulating the state of a PackWriter 93/4593/2
Dave Borowitz [Thu, 10 Nov 2011 20:49:15 +0000 (12:49 -0800)]
Add an object encapsulating the state of a PackWriter

Exposes essentially the same state machine to the programmer as is
exposed to the client via a ProgressMonitor, using a wrapper around
beginTask()/endTask().

Change-Id: Ic3622b4acea65d2b9b3551c668806981fa7293e3

12 years agoMerge "Implement DirCacheEntry.toString() to ease debugging"
Christian Halstrick [Fri, 11 Nov 2011 08:21:29 +0000 (03:21 -0500)]
Merge "Implement DirCacheEntry.toString() to ease debugging"

12 years agoClean up tab usage in Directory/File conflict table 29/4529/2
Robin Rosenberg [Sun, 30 Oct 2011 20:51:22 +0000 (21:51 +0100)]
Clean up tab usage in Directory/File conflict table

Change-Id: I394fc1ef714c8465cbd5af9c73338b9a324ad9c4
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
12 years agoAdd detection of untracked folders to IndexDiffFilter 85/4385/6
Jens Baumgart [Wed, 26 Oct 2011 12:00:48 +0000 (14:00 +0200)]
Add detection of untracked folders to IndexDiffFilter

Decorators need to know whether folders in the working tree contain only
untracked files. This change enhances IndexDiffFilter to report such
folders. This works only together with treewalks which operate in
default traversal mode. For treewalks which process entries in
postorder mode (files are walked before their parent folder is walked)
this detection doesn't work.

Bug: 359264
Change-Id: I9298d1e3ccac0aec8bbd4e8ac867bc06a5c89c9f
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
12 years ago[blame] Fix blame following renames in non-toplevel directories 68/4368/4
Carsten Pfeiffer [Thu, 27 Oct 2011 22:15:27 +0000 (00:15 +0200)]
[blame] Fix blame following renames in non-toplevel directories

Mark the treeWalk as recursive; otherwise following renames only works
for toplevel files.

Bug: 302549
Change-Id: I70867928eadf332b0942f8bf6877a3acb3828c87
Signed-off-by: Carsten Pfeiffer <carsten.pfeiffer@gebit.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
12 years agoSupport a configured credentials provider in LsRemoteCommand 71/4571/4
Kevin Sawicki [Tue, 8 Nov 2011 20:49:16 +0000 (12:49 -0800)]
Support a configured credentials provider in LsRemoteCommand

Refactored the three common transport configuration options:
credentials provider, timeout, and transport config callback
into a new TransportCommand base class which is now extended
by all commands that use a Transport object during execution.

Bug: 349188
Change-Id: I90c2c14fb4e3cc4712905158f9047153a0c235c2
Signed-off-by: Kevin Sawicki <kevin@github.com>
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
12 years agoImplement DirCacheEntry.toString() to ease debugging 96/4596/1
Matthias Sohn [Thu, 10 Nov 2011 12:34:59 +0000 (13:34 +0100)]
Implement DirCacheEntry.toString() to ease debugging

Change-Id: I9aa1b5817a18fb340411f47b25b6711d533590fd
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
12 years agoMerge changes Ibb3467f7,I2af99903
Robin Rosenberg [Thu, 10 Nov 2011 07:07:04 +0000 (02:07 -0500)]
Merge changes Ibb3467f7,I2af99903

* changes:
  Always use try/finally around DfsBlockCache.clockLock
  DfsBlockCache: Fix NPE when evicting empty cell

12 years agoMerge "Do not use the deprecated Tree class internally"
Christian Halstrick [Wed, 9 Nov 2011 08:40:45 +0000 (03:40 -0500)]
Merge "Do not use the deprecated Tree class internally"

12 years agoDo not use the deprecated Tree class internally 51/4551/3
Robin Rosenberg [Tue, 8 Nov 2011 21:07:59 +0000 (22:07 +0100)]
Do not use the deprecated Tree class internally

Replace it with DirCache, like we did to remove GitIndex.

Change-Id: Ia354770cee5c68f19945279b34aef6de54697435

12 years agoKill GitIndex 55/4355/5
Robin Rosenberg [Sun, 16 Oct 2011 05:01:21 +0000 (07:01 +0200)]
Kill GitIndex

A few places were still using GitIndex. Replacing it was fairly
simple, but there is a difference in test outcome in
ReadTreeTest.testUntrackedConflicts. I believe the new behavior
is good, since we do not update neither the index, not the worktree.

Change-Id: I4be5357b7b3139dded17f77e07a140addb213ea7
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
12 years agoDeprecate GitIndex more by using only DirCache internally. 56/4356/6
Robin Rosenberg [Wed, 19 Oct 2011 21:14:41 +0000 (23:14 +0200)]
Deprecate GitIndex more by using only DirCache internally.

This includes merging ReadTreeTest into DirCacheCheckoutTest and
converting IndexDiffTest to use DirCache only. The GitIndex specific
T0007GitIndex test remains.

GitIndex is deprecated. Let us speed up its demise by focusing the
DirCacheCheckout tests to using DirCache instead.

This also add explicit deprecation comments to methods that depend
on GitIndex in Repository and TreeEntry. The latter is deprecated in
itself.

Change-Id: Id89262f7fbfee07871f444378f196ded444f2783
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
12 years agoAlways use try/finally around DfsBlockCache.clockLock 73/4573/1
Shawn O. Pearce [Mon, 7 Nov 2011 20:06:56 +0000 (12:06 -0800)]
Always use try/finally around DfsBlockCache.clockLock

Any RuntimeException or Error in this block will leave the lock
held by the caller thread, which can later result in deadlock or
just cache requests hanging forever because they cannot get to
the lock object.

Wrap everything in try/finally to prevent the lock from hanging,
even though a RuntimeException or Error should never happen in
any of these code paths.

Change-Id: Ibb3467f7ee4c06f617b737858b4be17b10d936e0

12 years agoDfsBlockCache: Fix NPE when evicting empty cell 72/4572/1
Shawn O. Pearce [Tue, 8 Nov 2011 20:22:37 +0000 (12:22 -0800)]
DfsBlockCache: Fix NPE when evicting empty cell

The cache starts with a single empty Ref that has no data, as the
clock list does not support being empty. When this Ref is removed,
the size has to be decremented from the associated DfsPackKey,
which was previously null. Make it always be non-null.

Change-Id: I2af99903e8039405ea6d67f383576ffa43839cff

12 years agoDon't throw away the stack trace when tests fail 49/4549/1
Robin Rosenberg [Sat, 5 Nov 2011 15:52:24 +0000 (16:52 +0100)]
Don't throw away the stack trace when tests fail

Most unexpected exceptions are completely useless yielding message
like "null" or "3" or in the best cases something reasonable, but
still out of context.

Just declare the test as throwing an exception. That will retain
the full stack trace leading to the point of failure without using
a debugger or changing the code.

Change-Id: Id2454d328d1aa665606ae002de2c3805fe7baa8e

12 years agoMerge "Do not resolve path using cygwin unless told to"
Shawn Pearce [Fri, 4 Nov 2011 22:09:56 +0000 (18:09 -0400)]
Merge "Do not resolve path using cygwin unless told to"

12 years agoMerge changes Icea2572d,I2633e472,I207c0c93,I10cee76c,Ifd78e8ce,I890b5fcc,Ia0b01f5d...
Shawn Pearce [Fri, 4 Nov 2011 22:06:30 +0000 (18:06 -0400)]
Merge changes Icea2572d,I2633e472,I207c0c93,I10cee76c,Ifd78e8ce,I890b5fcc,Ia0b01f5d,Iec524abd

* changes:
  DfsBlockCache: Update hits to not include contains()
  Add a listener for changes to a DfsObjDatabase's pack files
  Expose the reverse index size in the DfsPackDescription
  Add a DfsPackFile method to get the number of cached bytes
  Expose the list of pack files in the DfsBlockCache
  Add a DFS repository description and reference it in each pack
  Clarify the docstring of DfsBlockCache.reconfigure()
  DFS: A storage layer for JGit

12 years agoMerge "Refactor HTTP server stack to use Filter as base"
Shawn O. Pearce [Fri, 4 Nov 2011 22:05:09 +0000 (18:05 -0400)]
Merge "Refactor HTTP server stack to use Filter as base"

12 years agoDfsBlockCache: Update hits to not include contains() 46/4546/2
Colby Ranger [Thu, 3 Nov 2011 22:30:17 +0000 (15:30 -0700)]
DfsBlockCache: Update hits to not include contains()

Also expose the underlying hit and miss counters, in
addition to the hit ratio.

Change-Id: Icea2572d62e59318133b0a88848019f34ad70975

12 years agoAdd a listener for changes to a DfsObjDatabase's pack files 45/4545/3
Dave Borowitz [Wed, 19 Oct 2011 22:55:14 +0000 (15:55 -0700)]
Add a listener for changes to a DfsObjDatabase's pack files

Intended for cross-request use, so only refers to
DfsRepositoryDescriptions rather than DfsRepositorys.

Change-Id: I2633e472c9264d91d632069f608d53d4bdd0fc09

12 years agoExpose the reverse index size in the DfsPackDescription 44/4544/3
Dave Borowitz [Thu, 3 Nov 2011 19:57:58 +0000 (12:57 -0700)]
Expose the reverse index size in the DfsPackDescription

This is analogous to the getPackSize() and getIndexSize() methods.

Change-Id: I207c0c93f9145826d84b3610eb4319fca074ee0d

12 years agoAdd a DfsPackFile method to get the number of cached bytes 43/4543/3
Dave Borowitz [Thu, 3 Nov 2011 19:54:21 +0000 (12:54 -0700)]
Add a DfsPackFile method to get the number of cached bytes

The counter is actually stored in the DfsPackKey so it can be
manipulated by the cache.

Change-Id: I10cee76c92d65c68d1aa1a9dd0c4fd7173c4cede

12 years agoExpose the list of pack files in the DfsBlockCache 42/4542/3
Dave Borowitz [Thu, 3 Nov 2011 19:52:19 +0000 (12:52 -0700)]
Expose the list of pack files in the DfsBlockCache

Callers may want to inspect the contents of the cache, which this allows
them to do in a read-only fashion without any locking.

Change-Id: Ifd78e8ce34e26e5cc33e9dd61d70c593ce479ee0