]> source.dussan.org Git - jgit.git/log
jgit.git
9 years agoFallback exactRef: Do not ignore symrefs to unborn branch 50/60150/2
Jonathan Nieder [Wed, 11 Nov 2015 18:42:46 +0000 (10:42 -0800)]
Fallback exactRef: Do not ignore symrefs to unborn branch

When asked to read a symref pointing to a branch-yet-to-be-born (such
as HEAD in a newly initialized repository), getRef and getRefs provide
different results.

getRef: SymbolicRef[HEAD -> refs/heads/master=00000000]
getRefs and getAdditionalRefs: nothing

exactRef should match the getRef behavior: it is meant to be a
simpler, faster version of getRef that lets you search for a ref
without resolving it using the search path without other semantic
changes.  But the fallback implementation of exactRef relies on getRefs
and produces null for this case.

Luckily the in-tree RefDatabase implementations override exactRef and
get the correct behavior.  But any out-of-tree storage backend that
doesn't inherit from DfsRefDatabase or RefDirectory would still return
null when it shouldn't.

Let the fallback implementation use getRef instead to avoid this.
This means that exactRef would waste some effort traversing the ref
search path when the named ref is not found --- but subclasses tend to
override exactRef for performance already, so in the default
implementation correctness is more important.

Bug: 478865
Change-Id: I60f04e3ce3bf4731640ffd2433d329e621330029

9 years agoRefDirectory.exactRef: Do not ignore symrefs to unborn branch 06/60106/2
Jonathan Nieder [Tue, 10 Nov 2015 23:11:04 +0000 (15:11 -0800)]
RefDirectory.exactRef: Do not ignore symrefs to unborn branch

When asked to read a symref pointing to a branch-yet-to-be-born (such
as HEAD in a newly initialized repository), DfsRepository and
FileRepository return different results.

FileRepository:

exactRef("HEAD") => null

DfsRepository:

exactRef("HEAD") => SymbolicRef[HEAD -> refs/heads/master=00000000]

getRef("HEAD") returns the same as DfsRepository's exactRef in both
backends.

The intended behavior is the DfsRepository one: exactRef() is supposed
to be like getRef(), but more exact because it doesn't need to
traverse the search path.

The discrepancy is because DfsRefDatabase implements exactRef()
directly with the intended semantics, while RefDirectory uses a
fallback implementation built on top of getRefs().  getRefs() skips
symrefs to an unborn branch.

Override the fallback implementation with a correct implementation
that is similar to getRef() to avoid this.  A followup change will fix
the fallback.

Change-Id: Ic138a5564a099ebf32248d86b93e2de9ab3c94ee
Reported-by: David Pursehouse <david.pursehouse@sonymobile.com>
Improved-by: Christian Halstrick <christian.halstrick@sap.com>
Bug: 478865

9 years agopgm: Open RevWalk and TreeWalk in try-with-resource 62/57162/1
David Pursehouse [Thu, 1 Oct 2015 08:38:53 +0000 (17:38 +0900)]
pgm: Open RevWalk and TreeWalk in try-with-resource

To prevent potential resource leaks.

Change-Id: I2039af04d9fb75405f8e13abf508623b7d4ef324
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
9 years agoant: Open Repository and Git in try-with-resource 61/57161/1
David Pursehouse [Thu, 1 Oct 2015 08:29:36 +0000 (17:29 +0900)]
ant: Open Repository and Git in try-with-resource

To prevent potential resource leak.

Change-Id: I3f4af9037c9d26ec575b529ab66066365ab918a5
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
9 years agopgm: Create instances of Git in try-with-resource 55/57155/1
David Pursehouse [Thu, 1 Oct 2015 07:07:02 +0000 (16:07 +0900)]
pgm: Create instances of Git in try-with-resource

To prevent potential resource leak.

Change-Id: I8ac4ae61193324849bafb46501a55f93c5029a4e
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
9 years agoFanoutBucket: Create ObjectInserter.Formatter in try-with-resource 48/57148/1
David Pursehouse [Thu, 1 Oct 2015 06:10:22 +0000 (15:10 +0900)]
FanoutBucket: Create ObjectInserter.Formatter in try-with-resource

To prevent potential resource leak.

Change-Id: Ife09be2822bc476199f10da8d1eb7ccc8da05b79
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
9 years agoFix compiler warnings in DiffFormatter.writeGitLinkText 50/57050/1
David Pursehouse [Wed, 30 Sep 2015 09:18:09 +0000 (18:18 +0900)]
Fix compiler warnings in DiffFormatter.writeGitLinkText

- Remove declaration of IOException that is no longer thrown

- Add missing //$NON-NLS-1$ to prevent "Non-externalized string literal"
  warning.

These warnings seem to have been introduced by If13f7b406.

Change-Id: I30058eed31b92067a6ab22e787732b08e29f8d63
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
9 years agoPrepare 4.1.1-SNAPSHOT builds 40/56840/1
Matthias Sohn [Mon, 28 Sep 2015 11:37:39 +0000 (13:37 +0200)]
Prepare 4.1.1-SNAPSHOT builds

Change-Id: I035f3a8d0f0de86e8b8f00e668be5ce008402e82
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoJGit v4.1.0.201509280440-r 17/56817/1 v4.1.0.201509280440-r
Matthias Sohn [Mon, 28 Sep 2015 08:36:08 +0000 (10:36 +0200)]
JGit v4.1.0.201509280440-r

Change-Id: I9a536870b9f5c1247c52d6c976a954115982fa1c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoUse java.nio.file consistently in FS 90/56390/3
Matthias Sohn [Mon, 21 Sep 2015 23:17:18 +0000 (01:17 +0200)]
Use java.nio.file consistently in FS

Since 4.0 we require Java 7 so there is no longer a need to override the
following methods in FS_POSIX, FS_Win32, FS_Win32_Cygwin
- lastModified()
- setLastModified()
- length()
- isSymlink()
- exists()
- isDirectory()
- isFile()
- isHidden()
Hence implement these methods in FS and remove overrides in subclasses.

Change-Id: I5dbde6ec806c66c86ac542978918361461021294
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoDeprecate FileUtil and move the code to FileUtils 92/55592/4
Andrey Loskutov [Wed, 9 Sep 2015 21:13:34 +0000 (23:13 +0200)]
Deprecate FileUtil and move the code to FileUtils

As discussed on https://git.eclipse.org/r/53836 it does not make sense
to have two similar utility classes in same package with intersecting
functionality. To not break the API, all methods from FileUtil are
copied to FileUtils, all FileUtil API is made deprecated and redirecting
now to FileUtils. Moved simple methods which are available in Java 7 API
are made package private and can be removed at any point later entirely
(right now they are in use).

Bug: 475070
Change-Id: Idffcf9840496c448173af7c052d8898ada68e27b
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years ago[performance] Cache platform name in SystemReader 95/55595/4
Andrey Loskutov [Wed, 9 Sep 2015 22:04:38 +0000 (00:04 +0200)]
[performance] Cache platform name in SystemReader

SystemReader.isMacOs() and SystemReader.isWindows() return values are
unlikely to change during the JVM lifetime (except tests). Don't read
system properties each time the methods are called, just use previously
calculated value.

Change-Id: I495521f67a8b544e7b7247d99bbd05a42ea16d20
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years ago[ignore rules] fix for backslash handling 78/56678/3
Andrey Loskutov [Thu, 24 Sep 2015 22:37:50 +0000 (00:37 +0200)]
[ignore rules] fix for backslash handling

An attempt to re-implement not well documented Git CLI behavior for
patterns with backslashes.

It looks like Git silently ignores all \ characters in ignore rules, if
they are NOT covered by 3 cases described in [1]:

{quote}
1) ... Put a backslash ("\") in front of the first hash for patterns
that begin with a hash.
...
2) Trailing spaces are ignored unless they are quoted with backslash
("\").
...
3) Put a backslash ("\") in front of the first "!" for patterns that
begin with a literal "!", for example, "\!important!.txt".
{quote}

Undocumented also is the fact that backslash itself can be escaped by
backslash.

So \h\e\l\l\o\.t\x\t rule matches hello.txt and a\\\\b a\b in Git CLI.

Additionally, the glob parser [2] knows special meaning of backslash:

{quote}
One can remove the special meaning of '?', '*' and '[' by preceding
them by a backslash, or, in case this is part of a shell command
line, enclosing them in quotes.  Between brackets these characters
stand for themselves.  Thus, "[[?*\]" matches the four characters
'[', '?', '*' and '\'.
{quote}

[1] https://www.kernel.org/pub/software/scm/git/docs/gitignore.html
[2] http://man7.org/linux/man-pages/man7/glob.7.html

Bug: 478065
Change-Id: I3dc973475d1943c5622103701fa8cb3ea0684e3e
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years ago[ignore rules] Fix for character group matcher 60/56760/1
Andrey Loskutov [Sat, 26 Sep 2015 09:34:02 +0000 (11:34 +0200)]
[ignore rules] Fix for character group matcher

Currently we fail to properly recognize character group if the pattern
before character group contains opening bracket.

See comment from Sebastien Arod on https://git.eclipse.org/r/56678/

Change-Id: I70d3657a2a328818ea2bdc1409d18ecb3a85825b
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoMerge "Show submodule difference as a hunk"
Matthias Sohn [Fri, 25 Sep 2015 21:48:02 +0000 (17:48 -0400)]
Merge "Show submodule difference as a hunk"

9 years agoShow submodule difference as a hunk 63/56263/3
Jacob Keller [Fri, 18 Sep 2015 06:05:07 +0000 (23:05 -0700)]
Show submodule difference as a hunk

Current DiffFormat behavior regarding submodules (aka git links) is
incorrect. The "Subproject commit <sha1>" appears as part of the diff
header, rather than as its own hunk.

--> From JGit implementation
 diff --git a/plugins/cookbook-plugin b/plugins/cookbook-plugin
 index b9d3ca8..ec6ed89 160000
 --- a/plugins/cookbook-plugin
 +++ b/plugins/cookbook-plugin
 -Subproject commit b9d3ca8a65030071e28be19296ba867ab424fbbf
 +Subproject commit ec6ed89c47ba7223f82d9cb512926a6c5081343e

--> From C Git 2.5.2
 diff --git a/plugins/cookbook-plugin b/plugins/cookbook-plugin
 index b9d3ca8..ec6ed89 160000
 --- a/plugins/cookbook-plugin
 +++ b/plugins/cookbook-plugin
 @@ -1 +1 @@
 -Subproject commit b9d3ca8a65030071e28be19296ba867ab424fbbf
 +Subproject commit ec6ed89c47ba7223f82d9cb512926a6c5081343e

The current way of processing submodules results in no hunk header and
includes the contents of the hunk as part of the headers. To fix this, we
can't just have our writeGitLinkDiffText output the hunk header. We have
to change the flow so that the raw text gets parsed as a diff. The easiest
way to do this is to fake the RawText in the FormatResult when we have a
GITLINK.

It should be noted that it seems possible for there to be a difference
between a GITLINK and a non-GITLINK, but I don't think this can happen in
practice, so I don't think we need to worry too much about it.

This patch also fixes up the test for GitLink headers, as the test was
for the old behavior. My setup has 3 other failing tests which may or
may not be the result of environmental changes. However, the same tests
fail without this commit, so I do not believe they are related.

Bug: 477759
Change-Id: If13f7b406904fad814416c93ed09ea47ef183337
Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
9 years agoProperly support special regex characters in ignore rules 37/56437/4
Andrey Loskutov [Tue, 22 Sep 2015 14:42:14 +0000 (16:42 +0200)]
Properly support special regex characters in ignore rules

Ignore rules should escape $^(){}+| chars if using regular expressions,
because they should be treated literally if they aren't part of a
character group.

Bug: 478055
Change-Id: Ic7276442d7f8f02594b85eae1ef697362e62d3bd
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoRemove unneeded @SuppressWarnings("boxing") 78/56278/3
Hugo Arès [Fri, 18 Sep 2015 18:35:46 +0000 (14:35 -0400)]
Remove unneeded @SuppressWarnings("boxing")

Fix the unit tests to not do boxing by using assertEquals(int, int)
instead of assertThat with a matcher.

Change-Id: I5412fe2f72c8ea0227b9ff3a3352ccb555e22231
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
9 years agoFix endless loop in ObjectChecker for MacOS 77/56177/2
Christian Halstrick [Thu, 17 Sep 2015 14:11:39 +0000 (16:11 +0200)]
Fix endless loop in ObjectChecker for MacOS

Bug: 477090
Change-Id: I0ba416f1cc172a835dd2723ff7fa904597ffd097
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoFix warnings about missing serialVersionUID 20/56120/2
Hugo Arès [Wed, 16 Sep 2015 18:34:54 +0000 (14:34 -0400)]
Fix warnings about missing serialVersionUID

Change-Id: Ieff64896aebeab793ff08ab89f10d5ccaee66021
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
9 years agoFix integer boxing eclipse warning 16/56116/2
Hugo Arès [Wed, 16 Sep 2015 17:22:15 +0000 (13:22 -0400)]
Fix integer boxing eclipse warning

Change-Id: I89a8495a799254586016393e51697cfbceacac8b
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
9 years agoFix integer boxing eclipse warning 15/56115/1
Hugo Arès [Wed, 16 Sep 2015 16:54:24 +0000 (12:54 -0400)]
Fix integer boxing eclipse warning

There was this warning because private assertEquals(Object, Object)
method was shadowing JUnit assertEquals methods.

Change-Id: I889bfe1d8c48210d9a42147a523c4829c5b5d1e3
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
9 years agoMerge branch 'stable-4.0' 30/55930/2
Matthias Sohn [Mon, 14 Sep 2015 22:54:53 +0000 (00:54 +0200)]
Merge branch 'stable-4.0'

Change-Id: I1b448ce01f4cdfa62611da9e4d37321a4af9c12d
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoPrepare 4.0.3-SNAPSHOT builds 27/55927/1
Matthias Sohn [Mon, 14 Sep 2015 21:38:48 +0000 (23:38 +0200)]
Prepare 4.0.3-SNAPSHOT builds

Change-Id: Ic5ab059bee460c76c6ff3e08141ce351a559691c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoUploadPack: Verify clients send only commits for shallow lines 03/55903/3
Shawn Pearce [Mon, 14 Sep 2015 19:18:20 +0000 (12:18 -0700)]
UploadPack: Verify clients send only commits for shallow lines

If a client mistakenly tries to send a tag object as a shallow line
JGit blindly assumes this is a commit and tries to parse the tag
buffer using the commit parser. This can cause an obtuse error like:

  InvalidObjectIdException: Invalid id: t c0ff331234...

The "t" comes from the "object c0ff331234..." line of the tag tring
to be parsed as though it where the "tree" line of a commit.

Run any client supplied shallow lines through the RevWalk to lookup
the object types. Fail fast with a protocol exception if any of them
are non-commit.

Skip objects not known to this repository. This matches behavior
with git-core's upload-pack, which sliently skips over any shallow
line object named by the client but not known by the server.

Change-Id: Ic6c57a90a42813164ce65c2244705fc42e84d700

9 years agoJGit v4.0.2.201509141540-r 07/55907/1 v4.0.2.201509141540-r
Matthias Sohn [Mon, 14 Sep 2015 19:41:35 +0000 (21:41 +0200)]
JGit v4.0.2.201509141540-r

Change-Id: I766d95aa282c92dcbd2846145ee52e9cc62dd1f8
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoS3 transport: Fix check for tmpdir 92/55692/1
Shawn Pearce [Thu, 10 Sep 2015 21:18:50 +0000 (14:18 -0700)]
S3 transport: Fix check for tmpdir

Properties.containsKey() is the correct call here; contains() was testing
if a value is present but the key is what was meant.

Change-Id: Ice72c9f4388583e18cf8aca6e837cc4299fd07fd

9 years agoURIish: fall back to host as humanish name 53/51253/4
Patrick Steinhardt [Thu, 2 Jul 2015 12:15:22 +0000 (14:15 +0200)]
URIish: fall back to host as humanish name

When we have a URI that contains an empty path component (that is
it only contains a "/") we want to fall back to the host as
humanish name.

This change is according to the behavior of upstream git, which
falls back on the hostname when guessing directory names for
newly cloned repositories (see [1] for the discussion).

[1] http://article.gmane.org/gmane.comp.version-control.git/274669

Change-Id: I44400c6ab72a2722d2155d53d63671bd867d6c44
Signed-off-by: Patrick Steinhardt <ps@pks.im>
9 years agoUpdate build to final R20150821153341 Orbit repository for Mars.1 47/55247/1
Matthias Sohn [Thu, 3 Sep 2015 22:46:06 +0000 (00:46 +0200)]
Update build to final R20150821153341 Orbit repository for Mars.1

Change-Id: I32d4c21f7cdd0c1a24f797012f98daa9a7f48acf
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoUpdate org.apache.httpcomponents 46/55246/1
Matthias Sohn [Mon, 13 Jul 2015 23:55:58 +0000 (01:55 +0200)]
Update org.apache.httpcomponents

- update org.apache.httpcomponents.httpcore to 4.3.3
- update org.apache.httpcomponents.httpclient to 4.3.6, 4.3.5 and later
  are reported to fix vulnerability CVE-2014-3577

CQ: 9220
CQ: 9221
Bug: 470523
Change-Id: I024448c941e81f7c1dc1cc2394329df90e9b3048
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoPushCertificateStore: Don't add no-op command to batch 28/55128/2
Dave Borowitz [Wed, 2 Sep 2015 19:04:33 +0000 (15:04 -0400)]
PushCertificateStore: Don't add no-op command to batch

If no refs match the input list and we are writing to a batch,
the returned new commit from write() will match the current commit.
Adding a command to the batch for this case is harmless as it will
succeed, but it's more straightforward to just skip adding a command
in this case.

Add tests or the combination of saving matching refs and saving to a
batch.

Change-Id: I6837389b08e6c80bc2d4c9e9c506d07293ea5fb2

9 years agoRestore lazy Bundle-ActivationPolicy removed in 3a4a5a4e 36/54936/1
Matthias Sohn [Mon, 31 Aug 2015 20:18:54 +0000 (22:18 +0200)]
Restore lazy Bundle-ActivationPolicy removed in 3a4a5a4e

This header was removed unintentionally from some bundles in
3a4a5a4e57f41c595ba950ea6f6680260669bf34. Restore it to ensure lazy
activation of bundles.

Change-Id: I1f841f978fb93278e3ec0533a01f1363510dd976
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoUpdate uses-clauses in OSGi manifests 72/54872/2
Matthias Sohn [Mon, 31 Aug 2015 07:38:18 +0000 (09:38 +0200)]
Update uses-clauses in OSGi manifests

In Bug 476164 it was reported that EGit doesn't start when the platform
comes with jsch 0.1.51 while this version of EGit/JGit brings jsch
0.1.53. This could be caused by outdated uses-clauses. Hence recompute
them using PDE tooling.

Bug: 476164
Change-Id: I185ba097884ead9cd034eba842bd3bf34181a99b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoUse java.io.File to check existence of loose objects in ObjectDirectory 57/54757/1
Matthias Sohn [Fri, 28 Aug 2015 11:09:50 +0000 (13:09 +0200)]
Use java.io.File to check existence of loose objects in ObjectDirectory

It was reported in [1] that 197e3393a51424fae45e51dce4a649ba26e5a368 led
to a performance regression in a BFG benchmark. Analysis showed that
this is caused by the exists() method in FS_POSIX, now overriding the
default implementation in FS. The default implementation of FS.exists()
uses java.io.File.exists(), while the new implementation in FS_POSIX
uses java.nio.file.Files.exists() - by simply removing the override in
FS_POSIX, performance was restored.

Profiling showed that java.nio.file.Files.exists() is substantially
slower than java.io.File.exists(), to the point where the exists() call
doubles the average cost of a call to
ObjectDirectory.insertUnpackedObject() - which the BFG uses a lot,
because it's rewriting history. Average times measured on Ubuntu were:

java.io.File.exists() - 4 microseconds
java.nio.file.Files.exists() - 60 microseconds

The loose object exists test should be using java.io.File and not FS.
ObjectDirectory uses FS.resolve() to traverse symlinks to objects but
then once inside objects all 256 sharded directories should be real
directories, and the object files should be real files, not dangling
symlinks. java.io.File.exists() is sufficient here, and faster.

Change ObjectDirectory to use File.exists() once its computed the File
handle.

This does mean JGit cannot run ObjectDirectory code on an abstract
virtual filesystem plugged into NIO2. If you really want to run JGit on
an esoteric non-standard filesystem like "in memory" you should look at
the DFS storage backend, which has fewer abstraction points to deal
with. Or write your own from scratch.

[1] https://dev.eclipse.org/mhonarc/lists/jgit-dev/msg02954.html

Change-Id: I74684dc3957ae1ca52a7097f83a6c420aa24310f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoFix warnings on FileUtils.isStaleFileHandle() 32/54632/1
Matthias Sohn [Wed, 26 Aug 2015 21:30:12 +0000 (23:30 +0200)]
Fix warnings on FileUtils.isStaleFileHandle()

- add @since annotation for new API method
- silence non-externalized String warning

Change-Id: I864176ced64e9569e7f2cdf8f777720655bfc578
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoDeprecate redundant FileUtil.delete(File), use FileUtils instead 37/53837/7
Andrey Loskutov [Sun, 16 Aug 2015 16:15:30 +0000 (18:15 +0200)]
Deprecate redundant FileUtil.delete(File), use FileUtils instead

Bug: 475070
Change-Id: I6dc651f4b47e1b2c8d7954ec982e21ae6bb5f7a6
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoHandle stale file handles on packed-refs file 50/54350/4
Martin Fick [Wed, 19 Aug 2015 21:05:54 +0000 (15:05 -0600)]
Handle stale file handles on packed-refs file

On a local filesystem the packed-refs file will be orphaned if it is
replaced by another client while the current client is reading the old
one. However, since NFS servers do not keep track of open files, instead
of orphaning the old packed-refs file, such a replacement will cause the
old file to be garbage collected instead.  A stale file handle exception
will be raised on NFS servers if the file is garbage collected (deleted)
on the server while it is being read.  Since we no longer have access to
the old file in these cases, the previous code would just fail. However,
in these cases, reopening the file and rereading it will succeed (since
it will reopen the new replacement file).  So retrying the read is a
viable strategy to deal with stale file handles on the packed-refs file,
implement such a strategy.

Since it is possible that the packed-refs file could be replaced again
while rereading it (multiple consecutive updates can easily occur with
ref deletions), loop on stale file handle exceptions, up to 5 extra
times, trying to read the packed-refs file again, until we either read
the new file, or find that the file no longer exists. The limit of 5 is
arbitrary, and provides a safe upper bounds to prevent infinite loops
consuming resources in a potential unforeseen persistent error
condition.

Change-Id: I085c472bafa6e2f32f610a33ddc8368bb4ab1814
Signed-off-by: Martin Fick<mfick@codeaurora.org>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoMerge "Add public isStaleFileHandle() API, improve detection."
Matthias Sohn [Wed, 26 Aug 2015 20:16:28 +0000 (16:16 -0400)]
Merge "Add public isStaleFileHandle() API, improve detection."

9 years agoAdd public isStaleFileHandle() API, improve detection. 89/54489/1
Martin Fick [Tue, 25 Aug 2015 13:48:50 +0000 (07:48 -0600)]
Add public isStaleFileHandle() API, improve detection.

Add a public API to the FileUtils to determine if an IOException is a
stale NFS file handle exception.  This will make it easier to detect
such errors, and interpret them consistently throughout the codebase.
This new API is a bit more lenient in its detection than the previous
detection, and should be able to detect some errors which previously
were not identified as stale file handle exceptions because they had the
word NFS in the error message.  Adjust the packfile handling code to use
this new API for detection.

Change-Id: I21f80014546ba1afec7335890e5ae79e7f521412
Signed-off-by: Martin Fick<mfick@codeaurora.org>
9 years agoSet "potentialNullReference" to "error" level and fixed all issues 75/52575/5
Andrey Loskutov [Sun, 26 Jul 2015 12:42:52 +0000 (14:42 +0200)]
Set "potentialNullReference" to "error" level and fixed all issues

There should be no functional change, the logic updated only to make
code simple so that compiler can understand what is going for. Removed
all @SuppressWarnings("null") annotations since they cannot be used if
"org.eclipse.jdt.core.compiler.problem.potentialNullReference" option is
set to the "error" level.

Bug: 470647
Change-Id: Ie93c249fa46e792198d362e531d5cbabaf41fdc4
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoEnable annotation based NPE analysis in jgit 80/50580/7
Andrey Loskutov [Sat, 20 Jun 2015 18:01:56 +0000 (20:01 +0200)]
Enable annotation based NPE analysis in jgit

Bug: 470647
Change-Id: I14d1983bb7c208faeffee0504e0567e38d8a89f3
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoUpdate Jetty to 9.2.13.v20150730 77/54177/1
Matthias Sohn [Wed, 19 Aug 2015 22:46:58 +0000 (00:46 +0200)]
Update Jetty to 9.2.13.v20150730

Change-Id: I0c2a4cafcd1992431888c2a48592d9cb1ac04747
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoUpdate com.jcraft.jsch to 0.1.53 17/54117/1
Matthias Sohn [Wed, 19 Aug 2015 13:48:12 +0000 (15:48 +0200)]
Update com.jcraft.jsch to 0.1.53

Update target platform to Orbit M20150818205559 for Mars in order to
update com.jcraft.jsch to 0.1.53. Also update pom.xml to use Mars target
platform profile by default.

CQ: 10045
Bug: 463580
Change-Id: I1bf151fbee7b00c7bd38cf1236c9bad50e3c64bd
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoRestored obsoleted createSymLink/readSymLink in FileUtil 18/54018/1
Andrey Loskutov [Tue, 18 Aug 2015 18:01:15 +0000 (20:01 +0200)]
Restored obsoleted createSymLink/readSymLink in FileUtil

Bug: 475070
Change-Id: I425ad842dc26b55f747f192348398a3912c0ca6b
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoUse NIO2 to implement FileUtils.rename() and expose options 68/46468/5
Matthias Sohn [Wed, 22 Apr 2015 23:11:58 +0000 (01:11 +0200)]
Use NIO2 to implement FileUtils.rename() and expose options

- use NIO2's Files.move() to reimplement rename()
- provide a second method accepting CopyOptions which can be used to
  request atomic move.

Change-Id: Ibcf722978e65745218a1ccda45344ca295911659
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoMove createSymLink/readSymLink to FileUtils 36/53836/2
Andrey Loskutov [Sun, 16 Aug 2015 15:41:22 +0000 (17:41 +0200)]
Move createSymLink/readSymLink to FileUtils

Bug: 475070
Change-Id: I258f4bf291e02ef8e6f867b5d71c04ec902b6bcb
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoMerge "Change FS not to throw NPE when facing InMemory databases"
Christian Halstrick [Mon, 17 Aug 2015 07:54:23 +0000 (03:54 -0400)]
Merge "Change FS not to throw NPE when facing InMemory databases"

9 years agoExpose the set of root commits in PackStatistics 42/53842/1
Shawn Pearce [Sun, 16 Aug 2015 21:10:16 +0000 (14:10 -0700)]
Expose the set of root commits in PackStatistics

Root commits are commits with zero parents.  If a commmit has no
parents it is the first commit in the repository.  In general the root
commits should be unique for any given project, as the first commit
will be created at a different time, by a different user with its own
message.  These root commits can be used as a "fingerprint" to
identify disjoint histories.

Change-Id: Id891dbc1f17c816cea404569578bb7635ff85cdb

9 years agoChange FS not to throw NPE when facing InMemory databases 43/53843/1
Christian Halstrick [Fri, 10 Jul 2015 11:01:10 +0000 (13:01 +0200)]
Change FS not to throw NPE when facing InMemory databases

The FS class and the subclasses FS_POSIX assumed in the findHook()
method that every repository has a valid gitDir. But in tests when using
in-memory-repositories this is not true and this method was generating
NPEs. Change the method to return null if no repository directory can be
determined.

Change-Id: I38a4d36dc6452b5dacae3d0dbf562b569ca3c19b

9 years agoFix NPE in DfsGarbageCollector and further reduce memory 43/53743/2
Shawn Pearce [Fri, 14 Aug 2015 04:29:30 +0000 (21:29 -0700)]
Fix NPE in DfsGarbageCollector and further reduce memory

DfsGarbageCollector asks PackWriter for the set of objects packed
after the bitmap index is written out.  This is now null as it was
cleared to release memory. Instead use PackBitmapIndexBuilder to
build the set as it also has the objects.

Reduce memory in PackBitmapIndexBuilder by fully discarding the
ObjectToPack instances. This was the original intent of commit
4bb523475d44 ("PackWriter: shed memory while creating bitmaps")
but failed as the instances were still held live here.

Switch to BlockList instead of ObjectToPack[]. This allows the
JVM to allocate many smaller arrays instead of one contiguous
array with 5.2M reference pointers. In a tight heap the smaller
allocations are more feasible.

Reduce the initial EWAHCompressedBitmaps for the 4 type maps.  On
average a typical repository is 30% commits, 30% trees and 30% blobs.
These bitmaps are typically very dense.  PackWriter orders objects by
commit, tree, blob when writing the file so these should always be a
very dense run of 1s with some 0s before and after. So even the 1/3rd
allocation is likely too large, but the later trim() will reduce the
internal buffer anyway.

Change-Id: If0b80a31cb00894f1485ff8f53ef7ae5a759a046

9 years agoCleanup Attributes and remove obsoleted Java7BasicAttributes class 51/53451/2
Andrey Loskutov [Sun, 9 Aug 2015 22:18:48 +0000 (00:18 +0200)]
Cleanup Attributes and remove obsoleted Java7BasicAttributes class

After jgit moved to Java 7 there is no need in an extra
Java7BasicAttributes class. Also all fields of Attributes can be made
final now.

Change-Id: I0be6daf7758189b0eecc4e26294bd278ed8bf7a0
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoMerge "Remove "experimental" from the description of the pack bitmap index"
Shawn Pearce [Thu, 13 Aug 2015 19:07:37 +0000 (15:07 -0400)]
Merge "Remove "experimental" from the description of the pack bitmap index"

9 years agoPackWriter: shed memory while creating bitmaps 78/53678/2
Shawn Pearce [Thu, 13 Aug 2015 05:58:26 +0000 (22:58 -0700)]
PackWriter: shed memory while creating bitmaps

Once bitmap creation begins the internal maps required for packing are
no longer necessary.  On a repository with 5.2M objects this can save
more than 438 MiB of memory by allowing the ObjectToPack instances to
get garbage collected away.

Downside is the PackWriter cannot be used for any further opertions
except to write the bitmap index.  This is an acceptable trade-off as
in practice nobody uses the PackWriter after the bitmaps are built.

Change-Id: Ibfaf84b22fa0590896a398ff659a91fcf03d7128

9 years agoMerge "Do not retain commit body during bitmap generation"
Shawn Pearce [Thu, 13 Aug 2015 16:09:03 +0000 (12:09 -0400)]
Merge "Do not retain commit body during bitmap generation"

9 years agoMerge "Bitmap builder: actually compress EWAH bitmaps in memory"
Shawn Pearce [Thu, 13 Aug 2015 16:08:29 +0000 (12:08 -0400)]
Merge "Bitmap builder: actually compress EWAH bitmaps in memory"

9 years agoBitmap builder: actually compress EWAH bitmaps in memory 79/53679/1
Shawn Pearce [Thu, 13 Aug 2015 06:18:24 +0000 (23:18 -0700)]
Bitmap builder: actually compress EWAH bitmaps in memory

For construction performance each new EWAHBitmap is allocated at the
roughly worst-case size the bitmap would need if all of the words must
be literal and no run length compression is available.  In practice
this is far larger than is required, wasting heap memory while the
bitmaps are computed.

Trim down each bitmap to its minimum required size. This copies the
internal array to a new smaller array, allowing the GC to reclaim the
prior larger array for reuse.

A single bitmap of 5.2M bits is only 79 KiB of memory without this
trim call but 15,000 such bitmaps is 1.1 GiB. Trimming can help fit
a larger number of bitmaps during processing.

Change-Id: I2bd19a786189db5b01c4c96f209b83de50e10c3b

9 years agoDo not retain commit body during bitmap generation 77/53677/1
Shawn Pearce [Thu, 13 Aug 2015 05:10:35 +0000 (22:10 -0700)]
Do not retain commit body during bitmap generation

The bitmap preparer only needs commit graph topology; it does not use
the message body.  Allow the RevWalk to free the body after the commit
has been parsed to save memory.

Change-Id: I97d4a440c9fc313873fd224bd05b9d9e3dc575db

9 years agoConsider original file mode while checking parent ignore rules 47/52547/4
Andrey Loskutov [Fri, 24 Jul 2015 21:26:43 +0000 (23:26 +0200)]
Consider original file mode while checking parent ignore rules

The WorkingTreeIterator.isEntryIgnored() should use originally requested
file mode while descending to the file tree root and checking ignore
rules. Original code asking isEntryIgnored() on a file was using
directory mode instead if the .gitignore was not located in the same
directory.

Bug: 473506
Change-Id: I9f16ba714c3ea9e6585e9c11623270dbdf4fb1df
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoChanged default log4j log level from "WARNING" to "WARN" 32/53532/1
Andrey Loskutov [Tue, 11 Aug 2015 07:58:57 +0000 (09:58 +0200)]
Changed default log4j log level from "WARNING" to "WARN"

Bug: 474674
Change-Id: I8be8934cf6cb3ee60567b59f8e836475efb780ac
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoClone should create Git instances which are able to close repository 94/53094/2
Andrey Loskutov [Mon, 3 Aug 2015 18:58:46 +0000 (20:58 +0200)]
Clone should create Git instances which are able to close repository

Bug: 474093
Change-Id: I13be133dac7834d1d2b51eb9948a716b8719d057
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoMerge "Clone should close repository after errors in fetch or checkout"
Christian Halstrick [Tue, 4 Aug 2015 11:34:20 +0000 (07:34 -0400)]
Merge "Clone should close repository after errors in fetch or checkout"

9 years agocontainsGitModulesFile() should not crash on bare repository 05/53005/3
Andrey Loskutov [Sat, 1 Aug 2015 15:03:11 +0000 (17:03 +0200)]
containsGitModulesFile() should not crash on bare repository

Change-Id: Iba7e4674b3d33c730613a6ac703977f48b015853
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoClone should close repository after errors in fetch or checkout 27/53027/1
Andrey Loskutov [Sun, 2 Aug 2015 21:46:09 +0000 (23:46 +0200)]
Clone should close repository after errors in fetch or checkout

Bug: 474093
Change-Id: Ia0a1478260b94a71a947aa8c04ee0c836d390aec
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoFixed javadoc: the getBranch() and getFullBranch() can return null 15/51015/5
Andrey Loskutov [Sun, 28 Jun 2015 18:34:57 +0000 (20:34 +0200)]
Fixed javadoc: the getBranch() and getFullBranch() can return null

Change-Id: I284a1b5f8220f68496f992b0e97e6934e03ae616
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoPushCertificate: Omit null pushee from text representation 37/52737/1
Dave Borowitz [Tue, 28 Jul 2015 17:53:07 +0000 (10:53 -0700)]
PushCertificate: Omit null pushee from text representation

Change-Id: Ie9546f2e0e9ee62e0a3c919572153b6076355195

9 years agoFix non-externalized string warning in Main.execute() 30/52530/1
Matthias Sohn [Fri, 24 Jul 2015 20:56:52 +0000 (22:56 +0200)]
Fix non-externalized string warning in Main.execute()

Change-Id: Ib0404daaf485aa6c8dc6ba0b169b46fb800325e4
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoHonor also https_proxy environment variable 86/52486/3
Christian Halstrick [Fri, 24 Jul 2015 12:05:37 +0000 (14:05 +0200)]
Honor also https_proxy environment variable

In addition to honor the http_proxy variable for setting a proxy for
http JGit should also honor the https_proxy variable to set a similar
proxy for https traffic

Bug: 473365
Change-Id: I1002cb575e26cd842bf81ad751ec7c267b585ce2
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoFix ResolveMerger when files should be replaced by folders 13/52213/3
Christian Halstrick [Sun, 19 Jul 2015 11:31:41 +0000 (13:31 +0200)]
Fix ResolveMerger when files should be replaced by folders

When during Merge for a certain path OURS & BASE contains a file and
THEIRS contains a folder there was a bug in JGit leading to unnecessary
conflicts. This commit fixes it and adds a test for this situation.

Bug: 472693
Change-Id: I71fac5a6a2ef926c01adc266c6f9b3275e870129
Also-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoMerge "Fix typos in javadoc of ObjectId.equals()"
Matthias Sohn [Tue, 21 Jul 2015 22:37:51 +0000 (18:37 -0400)]
Merge "Fix typos in javadoc of ObjectId.equals()"

9 years agoDon't keep empty ignore rules in the ignore node list 19/52019/2
Andrey Loskutov [Wed, 15 Jul 2015 22:23:37 +0000 (00:23 +0200)]
Don't keep empty ignore rules in the ignore node list

Change-Id: Icd893dfaba06561bbe5cc60ebf866ec5d8301c22
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoAllow leading/trailing spaces in ignore rules 03/52003/3
Andrey Loskutov [Wed, 15 Jul 2015 19:07:35 +0000 (21:07 +0200)]
Allow leading/trailing spaces in ignore rules

According to [1] leading spaces are allowed in ignore rules and trailing
spaces are allowed too if they are escaped via backslash.

[1] https://www.kernel.org/pub/software/scm/git/docs/gitignore.html

Bug: 472762
Change-Id: I5e3ae5599cb9e5d80072f38c82c20cbc9475a18a
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoDon't crash while parsing ignore patterns 40/51940/3
Andrey Loskutov [Tue, 14 Jul 2015 22:01:14 +0000 (00:01 +0200)]
Don't crash while parsing ignore patterns

Catch unexpected PatternSyntaxException and convert it to
InvalidPatternException. Log such errors, do not silently ignore them.

Bug: 463581
Change-Id: Id0936d9816769ec0cfae1898beda0f7a3c146e67
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoAllow leading literal '#' and '!' in ignore rules if they are escaped 90/51890/4
Andrey Loskutov [Mon, 13 Jul 2015 22:05:49 +0000 (00:05 +0200)]
Allow leading literal '#' and '!' in ignore rules if they are escaped

According to [1] backslash can escape leading special characters '#' and
'!' in ignore rules, so that they are treated literally.

[1] https://www.kernel.org/pub/software/scm/git/docs/gitignore.html

Bug: 463581
Change-Id: I4c02927413a9c63ea5dbf2954877080d902ec1b2
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoDon't trim trailing space if it is escaped with backslash 89/51889/4
Andrey Loskutov [Mon, 13 Jul 2015 21:58:04 +0000 (23:58 +0200)]
Don't trim trailing space if it is escaped with backslash

According to [1] backslash can escape trailing space in ignore rules.

[1] https://www.kernel.org/pub/software/scm/git/docs/gitignore.html

Bug: 463581
Change-Id: I9cf13f8775cb49f0b6d61cfd3ca3fd6d665fccd8
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoConsider only escaping backslash for regular expressions in ignore rules 88/51888/4
Andrey Loskutov [Mon, 13 Jul 2015 21:54:57 +0000 (23:54 +0200)]
Consider only escaping backslash for regular expressions in ignore rules

While checking if we should consider an ignore rule without '[]'
brackets as a regular expression, check if the backslash escapes one of
the glob special characters '?', '*', '[', '\\'. If not, backslash is
not a part of a regex and should be treated literally.

Bug: 463581
Change-Id: I85208c7f85246fbf6c5029ce3c8b7bb8f4dbd947
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoRemove "experimental" from the description of the pack bitmap index 57/52257/1
Terry Parker [Mon, 20 Jul 2015 18:28:11 +0000 (11:28 -0700)]
Remove "experimental" from the description of the pack bitmap index

Change-Id: I940701093eb6c6d26e147b79de77997b0df481a0
Signed-off-by: Terry Parker <tparker@google.com>
9 years agoFix typos in javadoc of ObjectId.equals() 75/52175/2
Matthias Sohn [Fri, 17 Jul 2015 14:13:57 +0000 (16:13 +0200)]
Fix typos in javadoc of ObjectId.equals()

Change-Id: Ic2503a2c3c616934d923937fdf8ceb4ae57b7028
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoDFS: Remove now-redundant getOneRef 16/52116/1
Jonathan Nieder [Thu, 16 Jul 2015 21:50:42 +0000 (14:50 -0700)]
DFS: Remove now-redundant getOneRef

Instead of reimplementing exactRef in a separate, private method,
use it directly.

Change-Id: I0fc06fc46eef0e36e571a6ef622f38dc2aa59038

9 years agoDFS: Override exactRef() with optimal version 15/52115/1
Shawn Pearce [Thu, 16 Jul 2015 21:31:50 +0000 (14:31 -0700)]
DFS: Override exactRef() with optimal version

This avoids scanning a directory to find all names and
then weeding down to the requested name.

Change-Id: I36ce31febad6e881182bc3a278c7ed35cc04cbda

9 years agoPushCertificate: Add toTextWithSignature() method 23/52023/2
Dave Borowitz [Thu, 16 Jul 2015 01:07:06 +0000 (18:07 -0700)]
PushCertificate: Add toTextWithSignature() method

Change-Id: Ic0129373cc0c0321ffa43dc11a658d4f891ec2c2

9 years agoPushCertificateParser: Add fromString method 22/52022/1
Dave Borowitz [Thu, 16 Jul 2015 01:04:10 +0000 (18:04 -0700)]
PushCertificateParser: Add fromString method

Change-Id: I74c3f65a9ff297f708d996a4c138456a31a466b8

9 years agoBaseReceivePack: Add method to override the push cert 21/52021/1
Dave Borowitz [Thu, 16 Jul 2015 00:58:26 +0000 (17:58 -0700)]
BaseReceivePack: Add method to override the push cert

Change-Id: Id912f45c933c78a85b245fa7b6edebbeb40b009c

9 years agoBaseReceivePack: Don't throw from getPushCertificate() 20/52020/1
Dave Borowitz [Thu, 16 Jul 2015 00:55:17 +0000 (17:55 -0700)]
BaseReceivePack: Don't throw from getPushCertificate()

Rather than lazily parsing the push in this method, parse it at the
end of recvCommands(), which already contains the necessary try/catch
for handling this error. This allows later callers to avoid having to
handle this condition superfluously.

Change-Id: I5dcaf1a44bf4e321adc281e3381e7e17ac89db06

9 years agoPushCertificateStore: Return boolean from batch save methods 16/52016/2
Dave Borowitz [Wed, 15 Jul 2015 17:18:01 +0000 (10:18 -0700)]
PushCertificateStore: Return boolean from batch save methods

Change-Id: I9730cb4f60c60ee6d5a7a156a0b6a53f79309ec3

9 years agoAllow saving push certs on a subset of refs 74/51874/4
Dave Borowitz [Mon, 13 Jul 2015 19:03:42 +0000 (12:03 -0700)]
Allow saving push certs on a subset of refs

Consider a BatchRefUpdate produced by Gerrit Code Review, where the
original command pushed over the wire might refer to
"refs/for/master", but that command is ignored and replaced with some
additional commands like creating "refs/changes/34/1234/1". We do not
want to store the cert in "refs/for/master@{cert}", since that may
lead someone looking to the ref to the incorrect conclusion that that
ref exists.

Add a separate put method that takes a collection of commands, and
only stores certs on those refs that have a matching command in the
cert.

Change-Id: I4661bfe2ead28a2883b33a4e3dfe579b3157d68a

9 years agoUpdate org.apache.httpcomponents 94/51894/1
Matthias Sohn [Mon, 13 Jul 2015 23:55:58 +0000 (01:55 +0200)]
Update org.apache.httpcomponents

- update org.apache.httpcomponents.httpcore to 4.3.3
- update org.apache.httpcomponents.httpclient to 4.3.6, 4.3.5 and later
  are reported to fix vulnerability CVE-2014-3577

CQ: 9220
CQ: 9221
Bug: 470523
Change-Id: I39b80b250c6c1daede6a23e9f177fb2988ac37bb
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoAccess static member LocalDiskRepositoryTestCase.CONTENT directly 60/51860/2
Matthias Sohn [Mon, 13 Jul 2015 15:06:54 +0000 (17:06 +0200)]
Access static member LocalDiskRepositoryTestCase.CONTENT directly

37a1e4be moved this constant causing the following error message in
Eclipse: "The static field LocalDiskRepositoryTestCase.CONTENT should be
accessed directly".

Change-Id: I4ceb57a30f2e5a8f7e55109ef260a244ed5e7044
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoPushCertificateStore: Add method to save in batch 66/51866/2
Dave Borowitz [Sat, 11 Jul 2015 00:12:54 +0000 (17:12 -0700)]
PushCertificateStore: Add method to save in batch

Change-Id: I8bfaee1a52d368ffe2cd7e8af1754a5261569078

9 years agoFixed @since tags on new API 01/51801/1
Andrey Loskutov [Sun, 12 Jul 2015 16:44:08 +0000 (18:44 +0200)]
Fixed @since tags on new API

Change-Id: I77bc2ec486ffe4c8b864663d103d8cf39c3f35e1
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoStore push certificates in refs/meta/push-certs 28/51128/13
Dave Borowitz [Tue, 30 Jun 2015 01:05:11 +0000 (18:05 -0700)]
Store push certificates in refs/meta/push-certs

Inspired by a proposal from gitolite[1], where we store a file in
a tree for each ref name, and the contents of the file is the latest
push cert to affect that ref.

The main modification from that proposal (other than lacking the
out-of-git batching) is to append "@{cert}" to filenames, which allows
storing certificates for both refs/foo and refs/foo/bar. Those
refnames cannot coexist at the same time in a repository, but we do
not want to discard the push certificate responsible for deleting the
ref, which we would have to do if refs/foo in the push cert tree
changed from a tree to a blob.

The "@{cert}" syntax is at least somewhat consistent with
gitrevisions(7) wherein @{...} describe operators on ref names.

As we cannot (currently) atomically update the push cert ref with the
refs that were updated, this operation is inherently racy. Kick the can
down the road by pushing this burden on callers.

[1] https://github.com/sitaramc/gitolite/blob/cf062b8bb6b21a52f7c5002d33fbc950762c1aa7/contrib/hooks/repo-specific/save-push-signatures

Change-Id: Id3eb32416f969fba4b5e4d9c4b47053c564b0ccd

9 years agoAdd setTargetBranch in RepoCommand. 96/51696/3
Yuxuan 'fishy' Wang [Fri, 10 Jul 2015 05:12:28 +0000 (22:12 -0700)]
Add setTargetBranch in RepoCommand.

This will allow us to write the super project in a branch other than
master.

Change-Id: I578ed9ecbc6423416239e31ad644531dae9fb5c3
Signed-off-by: Yuxuan 'fishy' Wang <fishywang@google.com>
9 years agoMove `RepositoryTestCase.indexState` to parent class 15/51615/2
Chris Price [Tue, 7 Jul 2015 12:06:50 +0000 (13:06 +0100)]
Move `RepositoryTestCase.indexState` to parent class

The test helper method `indexState` in `RepositoryTestCase` is
very useful for writing tests, even in cases where we need to
do things like create more than one repository for a test and
thus we don't want to use the built-in `db` member variable that
exists in `RepositoryTestCase`.  Since the method is static,
we can move it up to the parent class `LocalDiskRepositoryTestCase`,
where it can be used by tests that aren't a great fit for inheriting
directly from `RepositoryTestCase`.

Bug: 436200
Change-Id: I2b6de75c001d2d77ddb607488af246548784a67f
Signed-off-by: Chris Price <chris@puppetlabs.com>
9 years agoChange `indexState` to static method 14/51614/2
Chris Price [Tue, 7 Jul 2015 11:43:56 +0000 (12:43 +0100)]
Change `indexState` to static method

The `indexState` method is no longer referring to any
member variables from the class, so it can be made static.

Bug: 436200
Change-Id: I013316de5c373417ea758ca6e17da29209fead53
Signed-off-by: Chris Price <chris@puppetlabs.com>
9 years agoMerge "Use local variable in RepositoryTestCase.indexState"
Christian Halstrick [Thu, 9 Jul 2015 22:27:38 +0000 (18:27 -0400)]
Merge "Use local variable in RepositoryTestCase.indexState"

9 years agoPushCertificateParser: Move reader parsing to instance method 30/51630/3
Dave Borowitz [Thu, 9 Jul 2015 01:42:28 +0000 (18:42 -0700)]
PushCertificateParser: Move reader parsing to instance method

Change-Id: I8ab5fb97303e25b28187375b6f9ff28f918bdd43

9 years agoPushCertificateParser: Make constructor public 29/51629/3
Dave Borowitz [Thu, 9 Jul 2015 01:41:32 +0000 (18:41 -0700)]
PushCertificateParser: Make constructor public

Primarily to aid in writing end-to-end tests, which must be written
outside this package as we don't currently have a Bouncy Castle
dependency.

Change-Id: Ia24179773140d9ecc616b3a6b2e630c85d800157

9 years agoReport PackProtocolExceptions to client during receive-pack 09/51209/6
Dave Borowitz [Wed, 1 Jul 2015 18:24:25 +0000 (11:24 -0700)]
Report PackProtocolExceptions to client during receive-pack

We have done this since forever with the "wanted old new ref" error,
so let's do it for other such errors thrown in the same block as well.

Change-Id: Ib3b1c7f05e31a5b3e40e85eb07b16736920a033b

9 years agoPushCertificate: implement hashCode/equals/toString 04/51204/7
Dave Borowitz [Wed, 1 Jul 2015 16:42:35 +0000 (09:42 -0700)]
PushCertificate: implement hashCode/equals/toString

Change-Id: Ib588a3f47492cee5e5e6274a3b088678919a0fa0

9 years agoPushCertificateParser: Make pushee optional 08/51208/9
Dave Borowitz [Wed, 1 Jul 2015 18:44:09 +0000 (11:44 -0700)]
PushCertificateParser: Make pushee optional

When pushing to an HTTP server using the C git client, I observed a
certificate lacking a pushee field. Handle this gracefully in the
parser.

Change-Id: I7f3c5fa78f2e35172a93180036e679687415cac4

9 years agoPushCertificateParser: Change error string for invalid field 07/51207/8
Dave Borowitz [Wed, 1 Jul 2015 18:29:09 +0000 (11:29 -0700)]
PushCertificateParser: Change error string for invalid field

The old one didn't take an argument; the new one includes the field
name.

Change-Id: I175dc75dcdd05ba6fdec315c04c79550cfdc2342