]> source.dussan.org Git - jgit.git/log
jgit.git
13 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>
13 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>
13 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>
13 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>
13 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

13 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"

13 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

13 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>
13 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>
13 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

13 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

13 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

13 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"

13 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

13 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"

13 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

13 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

13 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

13 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

13 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

13 years agoAdd a DFS repository description and reference it in each pack 41/4541/3
Dave Borowitz [Fri, 7 Oct 2011 22:31:19 +0000 (15:31 -0700)]
Add a DFS repository description and reference it in each pack

Just as DfsPackDescription describes a pack but does not imply it is
open in memory, a DfsRepositoryDescription describes a repository at a
basic level without it necessarily being open.

Change-Id: I890b5fccdda12c1090cfabf4083b5c0e98d717f6

13 years agoClarify the docstring of DfsBlockCache.reconfigure() 40/4540/2
Dave Borowitz [Thu, 3 Nov 2011 19:43:03 +0000 (12:43 -0700)]
Clarify the docstring of DfsBlockCache.reconfigure()

The docstring was copied from the local filesystem cache code, which
actually attempted to reconfigure the cache on the fly. The DFS cache is
designed to be "reconfigured" exactly once.

Change-Id: Ia0b01f5d6b6b3d3a68d65a5c229ff67c1cede5bc

13 years agoDFS: A storage layer for JGit 30/3930/8
Shawn O. Pearce [Sat, 2 Jul 2011 01:31:53 +0000 (18:31 -0700)]
DFS: A storage layer for JGit

In practice the DHT storage layer has not been performing as well as
large scale server environments want to see from a Git server.

The performance of the DHT schema degrades rapidly as small changes
are pushed into the repository due to the chunk size being less than
1/3 of the pushed pack size.  Small chunks cause poor prefetch
performance during reading, and require significantly longer prefetch
lists inside of the chunk meta field to work around the small size.

The DHT code is very complex (>17,000 lines of code) and is very
sensitive to the underlying database round-trip time, as well as the
way objects were written into the pack stream that was chunked and
stored on the database.  A poor pack layout (from any version of C Git
prior to Junio reworking it) can cause the DHT code to be unable to
enumerate the objects of the linux-2.6 repository in a completable
time scale.

Performing a clone from a DHT stored repository of 2 million objects
takes 2 million row lookups in the DHT to locate the OBJECT_INDEX row
for each object being cloned. This is very difficult for some DHTs to
scale, even at 5000 rows/second the lookup stage alone takes 6 minutes
(on local filesystem, this is almost too fast to bother measuring).
Some servers like Apache Cassandra just fall over and cannot complete
the 2 million lookups in rapid fire.

On a ~400 MiB repository, the DHT schema has an extra 25 MiB of
redundant data that gets downloaded to the JGit process, and that is
before you consider the cost of the OBJECT_INDEX table also being
fully loaded, which is at least 223 MiB of data for the linux kernel
repository.  In the DHT schema answering a `git clone` of the ~400 MiB
linux kernel needs to load 248 MiB of "index" data from the DHT, in
addition to the ~400 MiB of pack data that gets sent to the client.
This is 193 MiB more data to be accessed than the native filesystem
format, but it needs to come over a much smaller pipe (local Ethernet
typically) than the local SATA disk drive.

I also never got around to writing the "repack" support for the DHT
schema, as it turns out to be fairly complex to safely repack data in
the repository while also trying to minimize the amount of changes
made to the database, due to very common limitations on database
mutation rates..

This new DFS storage layer fixes a lot of those issues by taking the
simple approach for storing relatively standard Git pack and index
files on an abstract filesystem. Packs are accessed by an in-process
buffer cache, similar to the WindowCache used by the local filesystem
storage layer. Unlike the local file IO, there are some assumptions
that the storage system has relatively high latency and no concept of
"file handles". Instead it looks at the file more like HTTP byte range
requests, where a read channel is a simply a thunk to trigger a read
request over the network.

The DFS code in this change is still abstract, it does not store on
any particular filesystem, but is fairly well suited to the Amazon S3
or Apache Hadoop HDFS. Storing packs directly on HDFS rather than
HBase removes a layer of abstraction, as most HBase row reads turn
into an HDFS read.

Most of the DFS code in this change was blatently copied from the
local filesystem code. Most parts should be refactored to be shared
between the two storage systems, but right now I am hesistent to do
this due to how well tuned the local filesystem code currently is.

Change-Id: Iec524abdf172e9ec5485d6c88ca6512cd8a6eafb

13 years agoMerge "Allow '\' in user names in URI-ish"
Shawn Pearce [Fri, 4 Nov 2011 17:10:47 +0000 (13:10 -0400)]
Merge "Allow '\' in user names in URI-ish"

13 years agoAllow '\' in user names in URI-ish 48/4548/1
Robin Rosenberg [Fri, 4 Nov 2011 16:53:44 +0000 (17:53 +0100)]
Allow '\' in user names in URI-ish

Actually this is not ok according to the RFC, but this implementation is
ment to be Git compatible. A '\' is needed when the authentication
requires or allows authentication to a Windows domain where the
user name can be specified as DOMAIN\user.

Change-Id: If02f258c032486f1afd2e09592a3c7069942eb8b

13 years agoMerge "Provide an id for submodule entries."
Shawn Pearce [Fri, 4 Nov 2011 14:14:46 +0000 (10:14 -0400)]
Merge "Provide an id for submodule entries."

13 years agoFix NPE when PATH environment variable is empty 28/4528/5
Carl Myers [Fri, 4 Nov 2011 13:42:12 +0000 (14:42 +0100)]
Fix NPE when PATH environment variable is empty

Change-Id: Ic27d509cd5e2d6c855e7d355fc308399d9dc01c9
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoProvide an id for submodule entries. 04/4304/12
Kevin Sawicki [Fri, 4 Nov 2011 07:14:53 +0000 (08:14 +0100)]
Provide an id for submodule entries.

Open a repository for submodule entries that have a child .git
directory and use the resolved HEAD commit as the entry's id.

Change-Id: I68d6e127f018b24ee865865a2dd3011a0e21453c
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoMerge "Implement Config.Entry.toString() to help debugging"
Shawn Pearce [Thu, 3 Nov 2011 20:19:17 +0000 (16:19 -0400)]
Merge "Implement Config.Entry.toString() to help debugging"

13 years agoMerge "DirCacheEntry: accessors for cached creation time (CTIME)"
Shawn Pearce [Thu, 3 Nov 2011 20:18:43 +0000 (16:18 -0400)]
Merge "DirCacheEntry: accessors for cached creation time (CTIME)"

13 years agoSuppress unused and unchecked warnings 32/4532/1
Kevin Sawicki [Thu, 3 Nov 2011 10:03:01 +0000 (11:03 +0100)]
Suppress unused and unchecked warnings

Change-Id: I9f51cc749f5cb9d2e3aa86874e60fca29b779565
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoDirCacheEntry: accessors for cached creation time (CTIME) 50/4450/1
Marc Strapetz [Mon, 31 Oct 2011 16:45:51 +0000 (17:45 +0100)]
DirCacheEntry: accessors for cached creation time (CTIME)

Change-Id: I986d5fff63ff1a86cca6bab49c744ea673fe4892

13 years agoMerge "Ensure the ObjectInserter flushes after a merge"
Shawn O. Pearce [Sat, 29 Oct 2011 01:14:26 +0000 (21:14 -0400)]
Merge "Ensure the ObjectInserter flushes after a merge"

13 years agoDo not resolve path using cygwin unless told to 31/4431/1
Robin Rosenberg [Fri, 28 Oct 2011 12:58:32 +0000 (14:58 +0200)]
Do not resolve path using cygwin unless told to

The system property jgit.cygpath must be set to true in order
for cygwin's cygpath to be used to translate path from cygwin
namespace to Windows namespace.

The cygwin path translation should be considered deprecated.

Bug: 353389
Change-Id: I2b5234c0ab936dac67d1e232f4cd28331bf3226d
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoImplement Config.Entry.toString() to help debugging 01/4401/2
Matthias Sohn [Thu, 27 Oct 2011 20:55:59 +0000 (22:55 +0200)]
Implement Config.Entry.toString() to help debugging

Change-Id: I86f6359d955d39ab033848b87ed39d20378d3c1f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoMerge "Enable full Transport configuration for JGit API commands"
Shawn Pearce [Thu, 27 Oct 2011 14:25:18 +0000 (10:25 -0400)]
Merge "Enable full Transport configuration for JGit API commands"

13 years agoMerge "Close the repo in CloneCommandTest"
Christian Halstrick [Thu, 27 Oct 2011 12:57:06 +0000 (08:57 -0400)]
Merge "Close the repo in CloneCommandTest"

13 years agoEnsure the ObjectInserter flushes after a merge 12/4412/2
Shawn O. Pearce [Wed, 26 Oct 2011 21:42:51 +0000 (14:42 -0700)]
Ensure the ObjectInserter flushes after a merge

If this does not happen some databases may discard
objects and not make them available.

Change-Id: I347b3c3724db52c8a6c09f4804071497a3a377ab

13 years agoMerge changes I488e9c97,I30f1049f,I1c088dce
Matthias Sohn [Wed, 26 Oct 2011 21:29:23 +0000 (17:29 -0400)]
Merge changes I488e9c97,I30f1049f,I1c088dce

* changes:
  Cosmetic adjustment of relative date format, do not display "0 months"
  Make use of the many date formatting options in the log command
  Define a utility class for handling Git date formats

13 years agoCosmetic adjustment of relative date format, do not display "0 months" 83/4383/7
Robin Rosenberg [Thu, 20 Oct 2011 22:23:57 +0000 (00:23 +0200)]
Cosmetic adjustment of relative date format, do not display "0 months"

Though it may seem less precise, "0 months" looks bad and the reference
Git implementation also does not display "0 months"

Change-Id: I488e9c97656f9941788ae88d7c5c1562ab6c26f0

13 years agoMake use of the many date formatting options in the log command 82/4382/6
Robin Rosenberg [Sun, 9 Oct 2011 20:01:39 +0000 (22:01 +0200)]
Make use of the many date formatting options in the log command

Change-Id: I30f1049fce086f2cf7e39ba3ad8b335df3a7b827

13 years agoClose the repo in CloneCommandTest 10/4410/1
Robin Rosenberg [Wed, 26 Oct 2011 20:14:20 +0000 (22:14 +0200)]
Close the repo in CloneCommandTest

The test failed on Windows only

Change-Id: Ibff5308b33deb73570626a08a04e86ad8f418023

13 years agoMerge "Allow detecting which files were renamed during a revwalk"
Matthias Sohn [Wed, 26 Oct 2011 20:18:21 +0000 (16:18 -0400)]
Merge "Allow detecting which files were renamed during a revwalk"

13 years agoAllow detecting which files were renamed during a revwalk 69/4369/3
Carsten Pfeiffer [Tue, 25 Oct 2011 07:22:11 +0000 (09:22 +0200)]
Allow detecting which files were renamed during a revwalk

The egit history view shows the files associated with a commit by using
a PathFilter. When following renames with a FollowFilter, the PathFilter
cannot be configured anymore because the affected files are simply not
known.

Thus, it should be possible to get to know which files are renamed.

Bug: 302549
Change-Id: I4761e9f5cfb4f0ef0b0e1e38991401a1d5003bea

13 years agoFix compatibilty breakage for SystemReader 98/4398/1
Robin Rosenberg [Sun, 23 Oct 2011 20:53:17 +0000 (22:53 +0200)]
Fix compatibilty breakage for SystemReader

Introducing a new abstract method is not nice when one
expects other to subclass them. Create default implementations
so old code that implements SystemReader does not break.
The default methods just delegate to the JVM.

Change-Id: I42cdfdcb6b29f7203697a23833dca85185b0b9b3
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoDefine a utility class for handling Git date formats 81/4381/4
Robin Rosenberg [Sat, 22 Oct 2011 23:51:30 +0000 (01:51 +0200)]
Define a utility class for handling Git date formats

Besides the formats known by git-log(1) we also add "locale"
and "localelocal" that formats dates according to the user's locale.
"locale" does not translate into local timezone, while
localelocal does.

Change-Id: I1c088dcec992c107e43f6c17be4ac9ed6eb428bf

13 years agoAdd locale to the properties manageable by SystemReader 80/4380/1
Robin Rosenberg [Sun, 9 Oct 2011 16:43:16 +0000 (18:43 +0200)]
Add locale to the properties manageable by SystemReader

Change-Id: I5e9af40d38bb671cb9fcdb0fa3b4eb3af5f36f6c

13 years agoAdd a method to SystemReader to get the time zone 79/4379/1
Robin Rosenberg [Sun, 9 Oct 2011 12:47:19 +0000 (14:47 +0200)]
Add a method to SystemReader to get the time zone

Change-Id: Ifd31f408ed2c5b7869694b715fea3219e74963ef

13 years agoUse the SystemReader to get system time 78/4378/1
Robin Rosenberg [Sun, 9 Oct 2011 12:47:49 +0000 (14:47 +0200)]
Use the SystemReader to get system time

Change-Id: Ib79c0cc964bfe799b204419e552b9aa6243966ce

13 years agoFix bad checkout behaviour when a file is removed 58/4358/4
Robin Rosenberg [Mon, 17 Oct 2011 06:28:19 +0000 (08:28 +0200)]
Fix bad checkout behaviour when a file is removed

We deleted the entry if there was a file and an index
entry, but not when there was just an index entry. Now
delete the file in both cases since the missing file
just means our worktree is dirty. This affected the
implementation of reset --hard.

Bug: 347574
Change-Id: Ie66fa61303472422830f5e33614e93ad65094e5d

13 years agoCorrect typo in RevWalk.parseBody comment 52/4352/2
Kevin Sawicki [Fri, 14 Oct 2011 15:49:17 +0000 (08:49 -0700)]
Correct typo in RevWalk.parseBody comment

Change-Id: I0e65a5a6809a8d32d256322dbcae94b6aa603e5e
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoMerge "Extend IndexDiff to calculate ignored files and folders"
Christian Halstrick [Mon, 10 Oct 2011 13:01:49 +0000 (09:01 -0400)]
Merge "Extend IndexDiff to calculate ignored files and folders"

13 years agoRefactor HTTP server stack to use Filter as base 32/4332/1
Shawn O. Pearce [Sat, 8 Oct 2011 00:23:58 +0000 (17:23 -0700)]
Refactor HTTP server stack to use Filter as base

All Git URLs operate off a suffix approach, for example the default
binding is for paths such as:

  */info/refs
  */git-upload-pack
  */git-receive-pack

These names are not common on project hosting servers, especially
one like Gerrit Code Review.

In addition to offering Git-over-HTTP as a servlet, offer it as a
filter that triggers when a matching suffix appears, but otherwise
delegates the request through the chain.  This filter would permit
Gerrit Code Review to place projects at the root of the server,
rather than within the "/p/" subdirectory, making the HTTP and SSH
URL structure exactly match each other.

To prevent breakage with existing users, the MetaServlet and
GitServlet are kept as wrappers delegating to their filters,
returning 404 Not Found when the filter has no match.

Change-Id: I2465c15c086497e0faaae5941159d80c028fa8b1

13 years agoMerge changes I7cdb563b,I7f60ae68,I7bd1e769,I92683805,I0e51a8e6
Shawn O. Pearce [Fri, 7 Oct 2011 20:00:21 +0000 (16:00 -0400)]
Merge changes I7cdb563b,I7f60ae68,I7bd1e769,I92683805,I0e51a8e6

* changes:
  UploadPack: Fix races in smart HTTP negotiation
  PackWriter: Export more statistics
  Do not requeue state vector in stateless RPC fetch
  Wrap excessively long line in BasePackFetchConnection
  Fix smart HTTP client stream alignment errors

13 years agoExtend IndexDiff to calculate ignored files and folders 20/4320/4
Jens Baumgart [Wed, 5 Oct 2011 11:56:23 +0000 (13:56 +0200)]
Extend IndexDiff to calculate ignored files and folders

IndexDiff was extended to calculate ignored files and folders.
The calculation only considers files that are NOT in the index.
This functionality is required by the new EGit decorator implementation.

Bug: 359264
Change-Id: I8f09d6a4d61b64aeea80fd22bf3a2963c2bca347
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
13 years agoMerge "Fix DirCacheEdtor.DeleteTree for empty string argument"
Christian Halstrick [Wed, 5 Oct 2011 10:21:01 +0000 (06:21 -0400)]
Merge "Fix DirCacheEdtor.DeleteTree for empty string argument"

13 years agoAdd missing comment text for mergeCommitTree parameter 62/4062/2
Kevin Sawicki [Wed, 24 Aug 2011 01:41:05 +0000 (18:41 -0700)]
Add missing comment text for mergeCommitTree parameter

Change-Id: I35cef13d8be4f06515668f710fd508700b90f44d
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoDo not attempt to resolve describe-labels with less than four digits 70/4170/2
Robin Rosenberg [Tue, 6 Sep 2011 15:37:53 +0000 (17:37 +0200)]
Do not attempt to resolve describe-labels with less than four digits

Change-Id: I21dcd3cca3b41102fd898238d8d640dea25e0caf
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoFix DirCacheEdtor.DeleteTree for empty string argument 90/4290/2
Robin Rosenberg [Sat, 24 Sep 2011 22:18:24 +0000 (00:18 +0200)]
Fix DirCacheEdtor.DeleteTree for empty string argument

Change-Id: I7425da91c0752ae82484e3c29d21b57402d30c61

13 years agoAdd varargs version of PathFilterGroup.createFromStrings 09/4309/4
Kevin Sawicki [Thu, 29 Sep 2011 17:16:29 +0000 (10:16 -0700)]
Add varargs version of PathFilterGroup.createFromStrings

This allows the following usage pattern:

  PathFilterGroup.createFromStrings("path1", "path2");

Change-Id: I589e758cc55873ce75614602e017ac793435e24d
Signed-off-by: Kevin Sawicki <kevin@github.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoNew config constant for default start-point 68/4168/4
Manuel Doninger [Thu, 8 Sep 2011 17:37:11 +0000 (19:37 +0200)]
New config constant for default start-point

This constant determine the default start-point, if the user
don't want to create a branch from the current HEAD.

Change-Id: Iea944e11e80134fbafc4c47383457d5ed11a4164
Signed-off-by: Manuel Doninger <manuel.doninger@googlemail.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoAdd blame unit test for file that is renamed twice. 35/4135/4
Kevin Sawicki [Sun, 4 Sep 2011 21:46:06 +0000 (14:46 -0700)]
Add blame unit test for file that is renamed twice.

Bug: 354507
Change-Id: I853774ecc1662d095a50a9668431c6e3ce4156c4
Signed-off-by: Kevin Sawicki <kevin@github.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoMerge "Use bundle dependency for org.hamcrest.org"
Robin Rosenberg [Fri, 30 Sep 2011 16:29:54 +0000 (12:29 -0400)]
Merge "Use bundle dependency for org.hamcrest.org"

13 years agoFire IndexChangedEvent on DirCache.commit() 19/4219/9
Matthias Sohn [Thu, 29 Sep 2011 22:00:22 +0000 (00:00 +0200)]
Fire IndexChangedEvent on DirCache.commit()

Since we replaced GitIndex by DirCache JGit didn't fire
IndexChangedEvents anymore. For EGit this still worked with a high
latency since its RepositoryChangeScanner which is scheduled to
run each 10 seconds fires the event in case the index changes.
This scanner is meant to detect index changes induced by a different
process e.g. by calling "git add" from native git.

When the index is changed from within the same process we should fire
the event synchronously. Compare the index checksum on write to index
checksum when index was read earlier to determine if index really
changed. Use IndexChangedListener interface to keep DirCache decoupled
from Repository.

Change-Id: Id4311f7a7859ffe8738863b3d86c83c8b5f513af
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoRemove TODO for generated constructor. 02/4302/1
Kevin Sawicki [Wed, 28 Sep 2011 21:10:24 +0000 (14:10 -0700)]
Remove TODO for generated constructor.

Change-Id: Ie405f6de99b8fa632d7462400e647a37f30e2e31
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoFix status in index entries after checkout of paths 96/4296/3
Christian Halstrick [Tue, 27 Sep 2011 16:43:14 +0000 (18:43 +0200)]
Fix status in index entries after checkout of paths

The checkout command was producing an inconsistent state of the index
which even confuses native git. The content sha1 of the touched index
entries was updated, but the length and the filemode was not updated.
Later in coding the index entries got automatically corrected (through
Dircache.checkoutEntry()) but the correction was after persisting the
index to disk. So, the correction was lost and we ended up with an index
where length and sha1 don't fit together.
A similar problem is fixed with "lastModified" of DircacheEntry. When
checking out a path without specifying an explicit commit (you want to
checkout what's in the index) the index was not updated regarding
lastModified. Readers of the index will think the checked-out
file is dirty because the file has a younger lastmodified then what's
in the index.

Change-Id: Ifc6d806fbf96f53c94d9ded0befcc932d943aa04
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
Bug: 355205

13 years agoUse bundle dependency for org.hamcrest.org 97/4297/2
Matthias Sohn [Tue, 27 Sep 2011 13:34:52 +0000 (15:34 +0200)]
Use bundle dependency for org.hamcrest.org

This is required to make org.eclipse.jgit.test compile when SWTBot isn't
installed which should only be necessary for EGit developers.

Change-Id: I7fc22ca9fc3048cdcf211c56612a3d1b8bed8f6e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoMerge "Fix DirCache,getEntriesWithin for empty string arguemnt"
Christian Halstrick [Mon, 26 Sep 2011 08:27:54 +0000 (04:27 -0400)]
Merge "Fix DirCache,getEntriesWithin for empty string arguemnt"

13 years agoMerge "Remove duplicate calls to DirCache.unlock on checkout"
Robin Rosenberg [Sun, 25 Sep 2011 08:44:45 +0000 (04:44 -0400)]
Merge "Remove duplicate calls to DirCache.unlock on checkout"

13 years agoFix DirCache,getEntriesWithin for empty string arguemnt 27/4127/2
Robin Rosenberg [Sat, 24 Sep 2011 22:17:19 +0000 (00:17 +0200)]
Fix DirCache,getEntriesWithin for empty string arguemnt

Change-Id: I0bea130df611de3ef8c9251093b11c62b5442cd1

13 years agoMerge "Document the show methods of RevWalkTextBuiltin"
Robin Rosenberg [Thu, 22 Sep 2011 16:27:48 +0000 (12:27 -0400)]
Merge "Document the show methods of RevWalkTextBuiltin"

13 years agoMerge "Fix a boxing warning in org.eclipse.jgit.pgm.RevWalkTextBuiltin"
Robin Rosenberg [Thu, 22 Sep 2011 16:27:27 +0000 (12:27 -0400)]
Merge "Fix a boxing warning in org.eclipse.jgit.pgm.RevWalkTextBuiltin"

13 years agoMerge "Remove use of GitIndex to detect index changes"
Robin Rosenberg [Thu, 22 Sep 2011 16:24:37 +0000 (12:24 -0400)]
Merge "Remove use of GitIndex to detect index changes"

13 years agoTest the reflog message for commit, cherry-pick, revert and merge 07/4207/2
Robin Rosenberg [Thu, 8 Sep 2011 17:42:19 +0000 (19:42 +0200)]
Test the reflog message for commit, cherry-pick, revert and merge

Change-Id: I319f09577b3e04f6c31399fe8e57e9a9ad2c8a6c
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoAppend merge strategy to reflog message 06/4206/2
Robin Rosenberg [Thu, 8 Sep 2011 16:35:17 +0000 (18:35 +0200)]
Append merge strategy to reflog message

Change-Id: Ia0e73208b86c45a3d96698e973f6e70ec5cb7303
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoFix the reflog prefix for cherry-pick, revert and merge commands 05/4205/2
Robin Rosenberg [Thu, 8 Sep 2011 16:05:01 +0000 (18:05 +0200)]
Fix the reflog prefix for cherry-pick, revert and merge commands

We should see whether the commit was a regular commit or something
else.

Change-Id: I82d8300cf3c53cb2bdcb6495386aadb803e0c6f7
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoDocument the show methods of RevWalkTextBuiltin 64/4264/1
Robin Rosenberg [Sun, 18 Sep 2011 11:07:24 +0000 (13:07 +0200)]
Document the show methods of RevWalkTextBuiltin

Change-Id: Ic704008cb215e1437c0a3fd1aec3aa38209ef3c7
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoFix a boxing warning in org.eclipse.jgit.pgm.RevWalkTextBuiltin 49/4249/2
Robin Rosenberg [Sun, 18 Sep 2011 11:08:03 +0000 (13:08 +0200)]
Fix a boxing warning in org.eclipse.jgit.pgm.RevWalkTextBuiltin

Change-Id: Ia154da79926ce25731e856bed264dd19a76bc1f1
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoEnable full Transport configuration for JGit API commands 82/4082/2
Roberto Tyley [Fri, 16 Sep 2011 15:04:35 +0000 (16:04 +0100)]
Enable full Transport configuration for JGit API commands

Add a TransportConfigCallback parameter to JGit API commands, to allow
consumers of the JGit command API to perform custom Transport configuration
that would be otherwise difficult to anticipate & expose on the API command
builders.

My specific use-case is configuring additional properties on SshTransport
- I need to take over the SshSessionFactory used by the transport. Using
TransportConfigCallback I can simply do this (rather than reimplement the
API command classes):

public void configure(Transport tn) {
  if (tn instanceof SshTransport) {
    ((SshTransport) tn).setSshSessionFactory(factoryProvider.get());
  }
}

Adding an explicit setSshSessionFactory() method to the JGit command
classes would bloat the API. Also, creating the replacement
SshSessionFactory is unnecessary if the transport is not SSH, but the type
of the Transport is only known once the remote has been resolved and the
URI parsed - consequently it makes sense to perform this step in a
callback, where the transport instance can be inspected to determine if
it's of a relevant type.

A note about where this leaves the API - there are now 4 commands:

CloneCommand
PullCommand
FetchCommand
PushCommand

-that share 3 identical transport-related parameters:

timeout
credentialsProvider
transportConfigurator

I think there's potential for introducing an interface or val-object to
identify/encapsulate this repetition, which I'd be happy to do in a
subsequent commit.

Change-Id: I8983c3627cdd7d7b2aeb0b6a3dadee553378b951
Signed-off-by: Roberto Tyley <roberto.tyley@gmail.com>
13 years agoRemove use of GitIndex to detect index changes 18/4218/3
Matthias Sohn [Fri, 9 Sep 2011 15:41:34 +0000 (17:41 +0200)]
Remove use of GitIndex to detect index changes

We can detect index changes using FileSnapshot. This is more efficient
and removes usage of a deprecated class.

Change-Id: I4a679102c9a1bd8e82b9ca93eb9dbbde445e9be4
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoPrepare 1.2.0 builds 56/4256/1
Matthias Sohn [Thu, 15 Sep 2011 20:00:44 +0000 (22:00 +0200)]
Prepare 1.2.0 builds

Change-Id: I9ec247135d93ef28d732e94f18d0ec1d0e2e6d44
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoMerge branch 'stable-1.1' 55/4255/1
Matthias Sohn [Thu, 15 Sep 2011 20:51:28 +0000 (22:51 +0200)]
Merge branch 'stable-1.1'

* stable-1.1:
  Prepare post v1.1.0.201109151100-r build
  JGit v1.1.0.201109151100-r

Change-Id: I31a2e8d26d635ded9ea956a26ad9b2d9e20862a1
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoPrepare post v1.1.0.201109151100-r build 54/4254/1 stable-1.1
Matthias Sohn [Thu, 15 Sep 2011 19:51:23 +0000 (21:51 +0200)]
Prepare post v1.1.0.201109151100-r build

Change-Id: Ib099ec93d8243b238641d79328216874532ab5eb
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoJGit v1.1.0.201109151100-r 50/4250/1 v1.1.0.201109151100-r
Matthias Sohn [Thu, 15 Sep 2011 15:28:38 +0000 (17:28 +0200)]
JGit v1.1.0.201109151100-r

Change-Id: Iadcec7e5973600e005cbdeb837fa197d3ae2ea86
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoUploadPack: Fix races in smart HTTP negotiation 76/4076/2
Shawn O. Pearce [Sat, 27 Aug 2011 00:28:18 +0000 (17:28 -0700)]
UploadPack: Fix races in smart HTTP negotiation

Clients cache the set of advertised references at the start of a
negotiation, and keep replaying the same "want SHA1" list to the
server on each negotiation step.  If another client pushes into
a branch and moves it by fast-forward, any request to obtain that
branch's prior SHA-1 is still valid, the commit is reachable from
the new position of the reference.  Unfortunately the fast-forward
causes smart HTTP negotations to fail, as the server no longer is
advertising that prior SHA-1.

Instead of causing clients to fail out with a "want invalid" error
and forcing the end-user retry, possibly getting into a never ending
try-fail-retry race while other clients are pushing into the same
busy repository, allow the slightly stale want request so long as
it is still reachable.

C Git implemented this same change recently to fix races on the
smart HTTP protocol when the C Git git-http-backend is used.

The new RequestPolicy feature also allows server authors to make
an even more lenient configuration that exports any SHA-1 to the
client. This might be useful in certain settings where a server
has authenticated the client as the "repository owner" and wants
to allow them to grab any content from the server as a complete
unbroken history chain.

The new setAdvertisedRefs() method allows server authors to manually
fix the references that are advertised, possibly bypassing the
getAllRefs() call on the Repository object.

Change-Id: I7cdb563bf9c55c83653f217f6e53c3add55a0541
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPackWriter: Export more statistics 13/4013/5
Shawn O. Pearce [Mon, 15 Aug 2011 23:38:28 +0000 (16:38 -0700)]
PackWriter: Export more statistics

Export the shallow pack information, and also a handy function to
sum up the total times.  Include the time writing out the index file,
if it was created.

Change-Id: I7f60ae6848455a357b25feedb23743bbf6c153cf
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoDo not requeue state vector in stateless RPC fetch 15/4315/1
Shawn O. Pearce [Wed, 14 Sep 2011 17:53:14 +0000 (10:53 -0700)]
Do not requeue state vector in stateless RPC fetch

If the no-done capability was enabled on the connection, don't
queue up the state vector again once the ACK %s ready message
is observed from the remote. The pack will be following in this
response stream, so the state vector is no longer required.

Change-Id: I7bd1e76957cb58c7ff1cdaeef227f1b02a7e5d24
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoWrap excessively long line in BasePackFetchConnection 14/4314/1
Shawn O. Pearce [Wed, 14 Sep 2011 17:48:43 +0000 (10:48 -0700)]
Wrap excessively long line in BasePackFetchConnection

Change-Id: I926838058c1de2146e22faa08570406600457acb
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoFix smart HTTP client stream alignment errors 13/4313/1
Shawn O. Pearce [Wed, 14 Sep 2011 22:31:42 +0000 (15:31 -0700)]
Fix smart HTTP client stream alignment errors

The client's use of UnionInputStream was broken when combined with a
8192 byte buffer used by PackParser. A smart HTTP client connection
always pushes in the execute stateless RPC input stream after the
data stream has ended from the remote peer. At the end of the pack,
PackParser asked to fill a 8192 byte buffer, but if only e.g. 1000
bytes remained UnionInputStream went to the next stream and asked
it for input, which triggered a new RPC, and failed because there
was nothing pending in the request buffer.

Change UnionInputStream to only return what it consumed from a
single InputStream without invoking the next InputStream, just in
case that second InputStream happens to be one of these magical
ones that generates an RPC invocation.

Change-Id: I0e51a8e6fea1647e4d2e08ac9cfc69c2945ce4cb
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoRemove duplicate calls to DirCache.unlock on checkout 40/4240/1
Kevin Sawicki [Tue, 13 Sep 2011 22:29:55 +0000 (15:29 -0700)]
Remove duplicate calls to DirCache.unlock on checkout

Calls to unlock the DirCache before throwing an exception
were not needed since checkout calls doCheckout wrapped
in a try block that calls DirCache.unlock in a finally
block.

Change-Id: I2b249a784f9e363430e288aad67fcefb7fac0a6e
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoMerge branch 'stable-1.1' 29/4229/1
Matthias Sohn [Sun, 11 Sep 2011 20:43:41 +0000 (22:43 +0200)]
Merge branch 'stable-1.1'

* stable-1.1:
  Allow commit when submodule changes are present
  Ignore submodule on checkout instead of deleting it
  cleanup: Reuse local variable for current DirCacheEntry
  Prepare post v1.1.0.201109071825-rc3 builds
  JGit v1.1.0.201109071825-rc3
  Use commit message best practices for Mylyn Commit template

Change-Id: I6ab9e5cb48c036d2ee2e548f5ec040d93672d8ad
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoAllow commit when submodule changes are present 94/4194/4
Robin Rosenberg [Sun, 4 Sep 2011 14:34:15 +0000 (16:34 +0200)]
Allow commit when submodule changes are present

We do not yet check or validate submodules, but can accept that
someone staged a change in a submodule with other tools.

Change-Id: I642ede382314bfbd1892dd509a2222885cc5350a
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoIgnore submodule on checkout instead of deleting it 92/4192/5
Robin Rosenberg [Sat, 3 Sep 2011 20:54:37 +0000 (22:54 +0200)]
Ignore submodule on checkout instead of deleting it

The purpose of this commit is to prevent destruction of
submodules on checkout from a tree with a submodule to
another. For consistency we handle the reverse case too,
when we checkout a branch that has a submodule and the
submodule directory exists. And finally we ignore the
case where the submodule changes.

We do not update the submodules, we just try to ignore
them harder.

Bug: 356664
Change-Id: I202c695a57af99b13d0d7220803fd08def3d9b5e
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agocleanup: Reuse local variable for current DirCacheEntry 01/4201/2
Robin Rosenberg [Sat, 3 Sep 2011 21:55:11 +0000 (23:55 +0200)]
cleanup: Reuse local variable for current DirCacheEntry

Since we already have assigned i.getDirCacheEntry() to dce,
use dce instead.

Change-Id: I107713ad0b356516d75c29203f945b056bad3ac7
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoPrepare post v1.1.0.201109071825-rc3 builds 89/4189/1
Matthias Sohn [Wed, 7 Sep 2011 23:50:41 +0000 (01:50 +0200)]
Prepare post v1.1.0.201109071825-rc3 builds

Change-Id: I1244f6639263d156a6f9e4530167e5eb1826a535
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoJGit v1.1.0.201109071825-rc3 87/4187/1 v1.1.0.201109071825-rc3
Matthias Sohn [Wed, 7 Sep 2011 22:36:30 +0000 (00:36 +0200)]
JGit v1.1.0.201109071825-rc3

Change-Id: I1b989d3101272632eacabe25a0b111ad0ff5bb3b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoFix IOOBE in Repository.resolveSimple() 64/4164/1
Dariusz Luksza [Tue, 6 Sep 2011 08:12:39 +0000 (10:12 +0200)]
Fix IOOBE in Repository.resolveSimple()

IndexOutOfBoundException is thrown from Repository.resolveSimple() when
'-g' string is located less then 4 characters from the end of this
string.

Change-Id: I1128c2cdfec9db3023d4d0f1f40d863e84b75950
Signed-off-by: Dariusz Luksza <dariusz@luksza.org>
13 years agoUse commit message best practices for Mylyn Commit template 59/4159/1
Matthias Sohn [Mon, 5 Sep 2011 21:57:21 +0000 (23:57 +0200)]
Use commit message best practices for Mylyn Commit template

We should use a template for Mylyn commit messages that matches with our
guidelines for commit messages.

http://wiki.eclipse.org/EGit/Contributor_Guide#Commit_message_guidelines

Bug: 337401
Change-Id: I05812abf0eb0651d22c439142640f173fc2f2ba0
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoFix the names in the reflog for checkouts 39/4139/2
Robin Rosenberg [Sun, 4 Sep 2011 09:12:49 +0000 (11:12 +0200)]
Fix the names in the reflog for checkouts

We were diverging from the reference implementation. Always use the
ref we checkout to as the to-branch the reflog and avoid the
refs/heads both in the from-name and to-name.

Change-Id: Id973d9102593872e4df41d0788f0eb7c7fd130c4
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoAdd a helper for parsing branch switch info out of a reflog entry 38/4138/2
Robin Rosenberg [Sun, 4 Sep 2011 09:10:47 +0000 (11:10 +0200)]
Add a helper for parsing branch switch info out of a reflog entry

Change-Id: I91c7e08c4afd2562df2226887a933d93c78a0371
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>