Commit Graph

4042 Commits

Author SHA1 Message Date
Terry Parker 4d6046da77 Remove "experimental" from the description of the pack bitmap index
Change-Id: I940701093eb6c6d26e147b79de77997b0df481a0
Signed-off-by: Terry Parker <tparker@google.com>
2015-07-20 11:28:58 -07:00
Matthias Sohn f53306bf2a Fix typos in javadoc of ObjectId.equals()
Change-Id: Ic2503a2c3c616934d923937fdf8ceb4ae57b7028
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-07-20 14:09:34 +02:00
Jonathan Nieder f8564c7601 DFS: Remove now-redundant getOneRef
Instead of reimplementing exactRef in a separate, private method,
use it directly.

Change-Id: I0fc06fc46eef0e36e571a6ef622f38dc2aa59038
2015-07-16 14:50:42 -07:00
Shawn Pearce d0e47a99aa 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
2015-07-16 14:31:50 -07:00
Dave Borowitz 39dc898dca PushCertificate: Add toTextWithSignature() method
Change-Id: Ic0129373cc0c0321ffa43dc11a658d4f891ec2c2
2015-07-15 18:36:45 -07:00
Dave Borowitz 74a57f3744 PushCertificateParser: Add fromString method
Change-Id: I74c3f65a9ff297f708d996a4c138456a31a466b8
2015-07-15 18:09:42 -07:00
Dave Borowitz c7c5fe718d BaseReceivePack: Add method to override the push cert
Change-Id: Id912f45c933c78a85b245fa7b6edebbeb40b009c
2015-07-15 18:09:42 -07:00
Dave Borowitz d8b9c5145b 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
2015-07-15 18:09:42 -07:00
Dave Borowitz d7377877e0 PushCertificateStore: Return boolean from batch save methods
Change-Id: I9730cb4f60c60ee6d5a7a156a0b6a53f79309ec3
2015-07-15 18:09:42 -07:00
Dave Borowitz 5706c8e38e 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
2015-07-15 18:09:41 -07:00
Matthias Sohn 16ba9919db 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>
2015-07-14 01:57:44 +02:00
Matthias Sohn 1cd2a0697d 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>
2015-07-14 01:23:14 +02:00
Dave Borowitz f946ed1d97 PushCertificateStore: Add method to save in batch
Change-Id: I8bfaee1a52d368ffe2cd7e8af1754a5261569078
2015-07-13 08:30:11 -07:00
Andrey Loskutov b4ecb88367 Fixed @since tags on new API
Change-Id: I77bc2ec486ffe4c8b864663d103d8cf39c3f35e1
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
2015-07-12 18:44:08 +02:00
Dave Borowitz d5a71e9ca3 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] cf062b8bb6/contrib/hooks/repo-specific/save-push-signatures

Change-Id: Id3eb32416f969fba4b5e4d9c4b47053c564b0ccd
2015-07-10 13:16:37 -07:00
Yuxuan 'fishy' Wang 217b2a7cc5 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>
2015-07-10 11:39:26 -07:00
Chris Price 37a1e4beaa 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>
2015-07-10 00:56:58 +02:00
Chris Price ad16eaac6e 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>
2015-07-10 00:56:58 +02:00
Christian Halstrick e7d86e1939 Merge "Use local variable in RepositoryTestCase.indexState" 2015-07-09 18:27:40 -04:00
Dave Borowitz 19b45dab71 PushCertificateParser: Move reader parsing to instance method
Change-Id: I8ab5fb97303e25b28187375b6f9ff28f918bdd43
2015-07-09 12:02:45 -07:00
Dave Borowitz 1f2827ecaa 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
2015-07-09 11:50:11 -07:00
Dave Borowitz 6e4e34bb9e 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
2015-07-09 11:41:24 -07:00
Dave Borowitz a643aaaa4a PushCertificate: implement hashCode/equals/toString
Change-Id: Ib588a3f47492cee5e5e6274a3b088678919a0fa0
2015-07-09 11:15:41 -07:00
Dave Borowitz 8293c770b5 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
2015-07-09 11:05:45 -07:00
Dave Borowitz f22f33f5bf 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
2015-07-09 10:56:02 -07:00
Dave Borowitz 618f213da0 PushCertificateParser: Add method for parsing from a stream
We intend to store received push certificates somewhere, like a
particular ref in the repository in question. For reading data back
out, it will be useful to read push certificates (without pkt-line
framing) in a streaming fashion.

Change-Id: I70de313b1ae463407b69505caee63e8f4e057ed4
2015-07-09 10:55:52 -07:00
Dave Borowitz dac6ae3d17 IO: Add a method for reading lines
Change-Id: Ib7be76aa7ac889354ad4782e2b64d4221a0e25b9
2015-07-08 10:29:11 -07:00
Dave Borowitz 469734bf87 BaseReceivePack: Treat all LFs as optional
Discussion on the git mailing list has concluded[1] that the intended
behavior for all (non-sideband) portions of the receive-pack protocol
is for trailing LFs in pkt-lines to be optional. Go back to using
PacketLineIn#readString() everywhere.

For push certificates specifically, we agreed that the payload signed
by the client is always concatenated with LFs even though the client
MAY omit LFs when framing the certificate for the wire. This is still
reflected in the implementation of PushCertificate#toText().

[1] http://thread.gmane.org/gmane.comp.version-control.git/273175/focus=273412

Change-Id: I817231c4d4defececb8722142fea18ff42e06e44
2015-07-07 15:44:17 -04:00
Dave Borowitz 59b000a672 BaseReceivePack: More validation during parseCommand
Change-Id: I25f3a5582a45dd0ec8f78f5daf74c2203797a184
2015-07-07 15:44:17 -04:00
Chris Price 88168c6d60 Use local variable in RepositoryTestCase.indexState
There is a signature of the test helper method `indexState`,
in `RepositoryTestCase`, that accepts a `Repository` object
as an argument.  However, there was one line of code where
this variable was not being used, and the method was instead
referring to a member variable `db`.  I believe this was
probably just an oversight in a previous refactor, and
that the correct behavior is to use the variable from
the argument list.  This change also has the benefit
of making it possible to convert this method to a static
method, since it no longer relies on any state from the class.

Bug: 436200
Change-Id: Iac95b046dc5bd0b3756642e241c3637f1fad3609
Signed-off-by: Chris Price <chris@puppetlabs.com>
2015-07-07 12:34:03 +01:00
Matthias Sohn 91e17b0080 Fix non-escaped quotes in JGitText.properties
In most texts we use "cannot" hence instead of escaping the apostroph in
"can't" use "cannot".

Bug: 471796
Change-Id: Icda5b4db38076789d06498428909306aef3cb68b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-07-07 08:24:43 +02:00
Jonathan Nieder 761f070866 Throw InvalidObjectIdException from ObjectId.fromString("tooshort")
ObjectId.fromString already throws InvalidObjectIdException for most
malformed object ids, but for this kind it previously threw
IllegalArgumentException.  Since InvalidObjectIdException is a child of
IllegalArgumentException, callers that catch IllegalArgumentException
will continue to work.

Change-Id: I24e1422d51607c86a1cb816a495703279e461f01
Signed-off-by: Jonathan Nieder <jrn@google.com>
2015-07-06 12:41:06 -07:00
Jonathan Nieder 0c7ad12c76 Avoid double-colon in InvalidObjectIdException description
The invalidId message in JGitText and the asAscii bad id both contain a
colon, so the resulting message would say

	Invalid id: : a78987c98798ufa

Fix it by keeping the colon in the translated message and not adding
another colon programmatically.

Noticed by code inspection.

Change-Id: I13972eebde27a4128828e6c64517666f0ba6288b
Signed-off-by: Jonathan Nieder <jrn@google.com>
2015-07-06 12:34:31 -07:00
Matthias Sohn 3c33d094a1 Compare API against 4.0.0.201506090130-r
Change-Id: I7cb7e89875b5238a54411b8c43c298d4cbe9f7ac
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-06-24 15:14:54 +02:00
Matthias Sohn 7e0d28e924 Merge branch 'stable-4.0'
Change-Id: I5c965206ad10bababe366a51ab7c33a8836a7868
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-06-24 14:46:51 +02:00
Matthias Sohn 176c4b4d5e Prepare 4.0.2-SNAPSHOT builds
Change-Id: I645cacfdde21aa28aa2e17c10dec0576b170ed0e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-06-24 13:51:21 +02:00
Matthias Sohn 90f36e5002 JGit v4.0.1.201506240215-r
Change-Id: Ib7713b657e7812b0debd72bb4eece0daa187e80d
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-06-24 08:17:29 +02:00
Tobias Oberlies d34314644e API to remove repositories from RepositoryCache
Add methods that allow to unregister repositories from the
RepositoryCache individually.

Bug: 470234
Change-Id: Ib918a634d829c9898072ae7bdeb22b099a32b1c9
Signed-off-by: Tobias Oberlies <tobias.oberlies@sap.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-06-23 14:30:18 +02:00
Christian Halstrick 6b65adca2d Add a grace period for packfiles during GC
For loose objects an expiration date can be set which will save too
young objects from being deleted. Add the same for packfiles. Packfiles
which are too young are not deleted.

Bug: 468024
Change-Id: I3956411d19b47aaadc215dab360d57fa6c24635e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-06-22 11:18:31 +02:00
Dave Borowitz d2fbbc910a SignedPushConfig: Allow setting a custom nonce generator impl
Change-Id: Ic0156a7d65d99881ef27801fcce7754594c436f0
2015-06-18 13:24:04 -04:00
Dave Borowitz ea21f17f29 PackCertificateParser: return null if nothing was received
Add test for this case in both the enabled and disabled cases.

Change-Id: If9d12192a2dc9f9dd1eac9844b5a7b0edadc0b34
2015-06-18 13:13:43 -04:00
Dave Borowitz fc6790a5d7 Include push certificates in RefUpdate
This may be used by e.g. a custom reflog implementation to record
this information along with the ref update.

Change-Id: I44adbfad704b76f9c1beced6e1ce82eaf71410d2
2015-06-18 10:27:31 -04:00
Dave Borowitz 856db79b1d Remove redundant @since tags in new signed push classes
Change-Id: I9f57318a59f668906b80f67230d36ba6439fc7b4
2015-06-18 10:19:40 -04:00
Dave Borowitz e49e7b4bd4 Add a separate type for the identity in a push certificate
These differ subtly from a PersonIdent, because they can contain
anything that is a valid User ID passed to gpg --local-user. Upstream
git push --signed will just take the configuration value from
user.signingkey and pass that verbatim in both --local-user and the
pusher field of the certificate. This does not necessarily contain an
email address, which means the parsing implementation ends up being
substantially different from RawParseUtils.parsePersonIdent.
Nonetheless, we try hard to match PersonIdent behavior in
questionable cases.

Change-Id: I37714ce7372ccf554b24ddbff56aa61f0b19cbae
2015-06-18 09:50:12 -04:00
Dave Borowitz b822f9b51d PushCertificateParser: include begin/end lines in signature
The signature is intended to be passed to a verification library such
as Bouncy Castle, which expects these lines to be present in order to
parse the signature.

Change-Id: I22097bead2746da5fc53419f79761cafd5c31c3b
2015-06-18 09:50:12 -04:00
Dave Borowitz 48c35edfd2 PushCertificateParser: throw PackProtocolException in more cases
This is the subclass of IOException already thrown by
BaseReceivePack#recvCommands when encountering an invalid value on
the wire. That's what PushCertificateParser is doing too, so use the
same subclass.

Change-Id: I1d323909ffe70757ea56e511556080695b1a0c11
2015-06-18 09:50:12 -04:00
Dave Borowitz 8d0cedf2ec Extract a class for signed push configuration
The default behavior is to read a repository's signed push
configuration from that repo's config file, but this is not very
flexible when it comes to managing groups of repositories (e.g. with
Gerrit). Allow callers to override the configuration using a POJO.

Change-Id: Ib8f33e75daa0b2fbd000a2c4558c01c014ab1ce5
2015-06-18 09:50:11 -04:00
Dave Borowitz e26d0c8ace BaseReceivePack: fix reading cert lines in command loop
Add a missing continues to prevent falling through to the command
parsing section. The first continue happens when the command list is
empty, so change the condition to see whether we have read the first
line, rather than any commands.

Fix comparison to BEGIN_SIGNATURE to use raw line with newline.

Change-Id: If3d92f5ceade8ba7605847a4b2bc55ff17d119ac
2015-06-18 09:50:11 -04:00
Matthias Sohn 4831470581 Silence API warnings introduced by a85e817d
a85e817d is a slightly breaking API change to classes that were
technically public and technically released in 4.0. However, it is
highly unlikely that people were actually depending on public behavior,
since there were no public methods to create PushCertificates with
anything other than null field values, or a PushCertificateParser that
did anything other than infinite loop or throw exceptions when reading.

Change-Id: I1d0ba9ea0a347e8ff5a0f4af169d9bb18c5838d2
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2015-06-17 23:08:45 +02:00
Terry Parker 8b20f2c890 Update comments about PackStatistics
Change-Id: I4862932dc38b58cc98400ed584cc506013846065
Signed-off-by: Terry Parker <tparker@google.com>
2015-06-16 10:08:18 -07:00