summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test
Commit message (Collapse)AuthorAgeFilesLines
* Merge "Limit the range of commits for which bitmaps are created."Shawn Pearce2015-10-101-0/+73
|\
| * Limit the range of commits for which bitmaps are created.Terry Parker2015-10-081-0/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A bitmap index contains bitmaps for a set of commits in a pack file. Creating a bitmap for every commit is too expensive, so heuristics select the most "important" commits. The most recent commits are the most valuable. To clone a repository only those for the branch tips are needed. When fetching, only commits since the last fetch are needed. The commit selection heuristics generally work, but for some repositories the number of selected commits is prohibitively high. One example is the MSM 3.10 Linux kernel. With over 1 million commits on 2820 branches, the current heuristics resulted in +36k selected commits. Each uncompressed bitmap for that repository is ~413k, making it difficult to complete a GC operation in available memory. The benefit of creating bitmaps over the entire history of a repository like the MSM 3.10 Linux kernel isn't clear. For that repository, most history for the last year appears to be in the last 100k commits. Limiting bitmap commit selection to just those commits reduces the count of selected commits from ~36k to ~10.5k. Dropping bitmaps for older commits does not affect object counting times for clones or for fetches on clients that are reasonably up-to-date. This patch defines a new "bitmapCommitRange" PackConfig parameter to limit the commit selection process when building bitmaps. The range starts with the most recent commit and walks backwards. A range of 10k considers only the 10000 most recent commits. A range of zero creates bitmaps only for branch tips. A range of -1 (the default) does not limit the range--all commits in the pack are used in the commit selection process. Change-Id: Ied92c70cfa0778facc670e0f14a0980bed5e3bfb Signed-off-by: Terry Parker <tparker@google.com>
* | Delete non empty directories before checkout a pathAndrey Loskutov2015-10-091-1/+391
| | | | | | | | | | | | | | | | | | | | If the checkout path is currently a non-empty directory (and was a link or a regular file before), this directory will be removed before performing checkout, but only if the checkout path is specified. Bug: 474973 Change-Id: Ifc6c61592d9b54d26c66367163acdebea369145c Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* | Add utility method allowing to check for empty folders in workdirChristian Halstrick2015-10-081-3/+21
|/ | | | | | | | | Previously the method DirCacheCheckoutTest#assertWorkDir() silently skipped over empty folders. If tests would have left unexpected empty folders in the worktree this would be overlooked. Now empty folders have to be specified by something like mkmap("<foldername>", "/", ...] Change-Id: Idb8b270e92daf02ecdc381d148a5958bd83ec057 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Merge "RepoCommand: Add setRecordRemoteBranch option to record upstream branch"Jonathan Nieder2015-10-051-0/+45
|\
| * RepoCommand: Add setRecordRemoteBranch option to record upstream branchStefan Beller2015-10-051-0/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On a server also running Gerrit that is using RepoCommand to convert from an XML manifest to a git submodule superproject periodically, it would be handy to be able to use Gerrit's submodule subscription feature[1] to update the superproject automatically between RepoCommand runs as changes are merged in each subprojects. This requires setting the 'branch' field for each submodule so that Gerrit knows what branch to watch. Add an option to do that. Setting the branch field also is useful for plain Git users, since it allows them to use "git submodule update --remote" to manually update all submodules between RepoCommand runs. [1] https://gerrit-review.googlesource.com/Documentation/user-submodules.html Change-Id: I1a10861bcd0df3b3673fc2d481c8129b2bdac5f9 Signed-off-by: Stefan Beller <sbeller@google.com>
* | [ignore rules] fix for handling unmatched '[' bracketsAndrey Loskutov2015-09-302-1/+55
|/ | | | | | | | | | | | | | | This patch makes JGit parsing of ignore rules containing unmatched '[' bracket compatible to the Git CLI. Since '[' starts character group, Git tries to parse the ignore rule as a shell glob pattern and if the character group is not closed, the glob pattern is invalid and so the ignore rule never matches anything. See also http://article.gmane.org/gmane.comp.version-control.git/278699. Bug: 478490 Change-Id: I734a4d14fcdd721070e3f75d57e33c2c0700d503 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* Add test case comparing CGit vs JGit ignore behavior for random patternsSébastien Arod2015-09-301-0/+275
| | | | | | | | This test case was developed in the scope of bug 478065. Bug: 478065 Change-Id: Ibcce1ed375d4a6ba05461e6c6b287d16752fa681 Signed-off-by: Sébastien Arod <sebastien.arod@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Prepare 4.2.0-SNAPSHOT buildsMatthias Sohn2015-09-282-41/+41
| | | | | Change-Id: If559d3565b1f84c93a533e1ce18d5293605d1950 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Prepare 4.1.1-SNAPSHOT buildsMatthias Sohn2015-09-282-41/+41
| | | | | Change-Id: I035f3a8d0f0de86e8b8f00e668be5ce008402e82 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* JGit v4.1.0.201509280440-rv4.1.0.201509280440-rMatthias Sohn2015-09-282-2/+2
| | | | | Change-Id: I9a536870b9f5c1247c52d6c976a954115982fa1c Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* [ignore rules] fix for backslash handlingAndrey Loskutov2015-09-261-8/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* [ignore rules] Fix for character group matcherAndrey Loskutov2015-09-261-0/+1
| | | | | | | | | | 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>
* Merge "Show submodule difference as a hunk"Matthias Sohn2015-09-251-3/+2
|\
| * Show submodule difference as a hunkJacob Keller2015-09-241-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | Properly support special regex characters in ignore rulesAndrey Loskutov2015-09-241-0/+78
| | | | | | | | | | | | | | | | | | | | 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>
* | Remove unneeded @SuppressWarnings("boxing")Hugo Arès2015-09-231-5/+3
|/ | | | | | | | 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>
* Fix endless loop in ObjectChecker for MacOSChristian Halstrick2015-09-171-0/+11
| | | | | Bug: 477090 Change-Id: I0ba416f1cc172a835dd2723ff7fa904597ffd097 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix integer boxing eclipse warningHugo Arès2015-09-171-1/+1
| | | | | Change-Id: I89a8495a799254586016393e51697cfbceacac8b Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
* URIish: fall back to host as humanish namePatrick Steinhardt2015-09-101-0/+58
| | | | | | | | | | | | | | | 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>
* PushCertificateStore: Don't add no-op command to batchDave Borowitz2015-09-021-0/+28
| | | | | | | | | | | | | 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
* Use NIO2 to implement FileUtils.rename() and expose optionsMatthias Sohn2015-08-171-0/+12
| | | | | | | | - 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>
* Consider original file mode while checking parent ignore rulesAndrey Loskutov2015-08-121-0/+50
| | | | | | | | | | | | 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>
* containsGitModulesFile() should not crash on bare repositoryAndrey Loskutov2015-08-031-0/+8
| | | | | Change-Id: Iba7e4674b3d33c730613a6ac703977f48b015853 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* PushCertificate: Omit null pushee from text representationDave Borowitz2015-07-281-0/+1
| | | | Change-Id: Ie9546f2e0e9ee62e0a3c919572153b6076355195
* Fix ResolveMerger when files should be replaced by foldersChristian Halstrick2015-07-231-0/+74
| | | | | | | | | | 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>
* Don't keep empty ignore rules in the ignore node listAndrey Loskutov2015-07-211-1/+21
| | | | | Change-Id: Icd893dfaba06561bbe5cc60ebf866ec5d8301c22 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* Allow leading/trailing spaces in ignore rulesAndrey Loskutov2015-07-211-0/+61
| | | | | | | | | | | 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>
* Allow leading literal '#' and '!' in ignore rules if they are escapedAndrey Loskutov2015-07-211-0/+12
| | | | | | | | | | | 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>
* Don't trim trailing space if it is escaped with backslashAndrey Loskutov2015-07-211-0/+6
| | | | | | | | | | 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>
* Consider only escaping backslash for regular expressions in ignore rulesAndrey Loskutov2015-07-211-0/+10
| | | | | | | | | | | 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>
* PushCertificate: Add toTextWithSignature() methodDave Borowitz2015-07-151-0/+1
| | | | Change-Id: Ic0129373cc0c0321ffa43dc11a658d4f891ec2c2
* PushCertificateParser: Add fromString methodDave Borowitz2015-07-151-3/+10
| | | | Change-Id: I74c3f65a9ff297f708d996a4c138456a31a466b8
* PushCertificateStore: Return boolean from batch save methodsDave Borowitz2015-07-151-1/+5
| | | | Change-Id: I9730cb4f60c60ee6d5a7a156a0b6a53f79309ec3
* Allow saving push certs on a subset of refsDave Borowitz2015-07-151-2/+24
| | | | | | | | | | | | | | | | 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
* Access static member LocalDiskRepositoryTestCase.CONTENT directlyMatthias Sohn2015-07-141-6/+7
| | | | | | | | 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>
* PushCertificateStore: Add method to save in batchDave Borowitz2015-07-131-0/+22
| | | | Change-Id: I8bfaee1a52d368ffe2cd7e8af1754a5261569078
* Store push certificates in refs/meta/push-certsDave Borowitz2015-07-101-0/+304
| | | | | | | | | | | | | | | | | | | | | | | | | 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
* Add setTargetBranch in RepoCommand.Yuxuan 'fishy' Wang2015-07-101-30/+51
| | | | | | | | 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>
* PushCertificateParser: Make pushee optionalDave Borowitz2015-07-091-0/+20
| | | | | | | | 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
* PushCertificateParser: Add method for parsing from a streamDave Borowitz2015-07-091-0/+60
| | | | | | | | | 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
* IO: Add a method for reading linesDave Borowitz2015-07-081-0/+116
| | | | Change-Id: Ib7be76aa7ac889354ad4782e2b64d4221a0e25b9
* BaseReceivePack: Treat all LFs as optionalDave Borowitz2015-07-072-18/+82
| | | | | | | | | | | | | | | | 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
* BaseReceivePack: More validation during parseCommandDave Borowitz2015-07-072-15/+37
| | | | Change-Id: I25f3a5582a45dd0ec8f78f5daf74c2203797a184
* Throw InvalidObjectIdException from ObjectId.fromString("tooshort")Jonathan Nieder2015-07-061-0/+17
| | | | | | | | | | | 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>
* Merge branch 'stable-4.0'Matthias Sohn2015-06-241-0/+44
|\ | | | | | | Change-Id: I5c965206ad10bababe366a51ab7c33a8836a7868 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * Prepare 4.0.2-SNAPSHOT buildsMatthias Sohn2015-06-242-41/+41
| | | | | | | | | | Change-Id: I645cacfdde21aa28aa2e17c10dec0576b170ed0e Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * JGit v4.0.1.201506240215-rv4.0.1.201506240215-rMatthias Sohn2015-06-242-2/+2
| | | | | | | | | | Change-Id: Ib7713b657e7812b0debd72bb4eece0daa187e80d Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * Add a grace period for packfiles during GCChristian Halstrick2015-06-221-0/+44
| | | | | | | | | | | | | | | | | | 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>
| * Prepare 4.0.1-SNAPSHOT buildsMatthias Sohn2015-06-092-41/+41
| | | | | | | | | | Change-Id: I51d03d1a47d1e3cd453701e397750749867028a2 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>