summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src
Commit message (Collapse)AuthorAgeFilesLines
* Mark fields of BaseReceivePack privateShawn O. Pearce2012-09-052-19/+36
| | | | | | | | | | | None of these should have been exposed to base classes. The majority of them are private implementation details that are not required by a subclass in order to interact with the base protocol definition. The few that are needed should be visible as accessor methods, so the internals can be modified without breaking the public JGit API. Change-Id: I874179105c9c37703307facbbf99387c52bf772c Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Delete checkObjectCollisions from PackParserShawn O. Pearce2012-09-051-46/+11
| | | | | | | | | | | | | This flag was added to provide an unsafe operation on the local repository because the storage.dht code was too damn slow to provide proper safe Git behavior all of the time. Now that stoarge.dht has been removed from the repository, also delete this unsafe flag to prevent applications from misusing the JGit library and permitting users to potentially damage their local repository with bad data received from an untrusted peer. Change-Id: Ib1861c48bb74836731e7b7d57b635dd654b0dc66 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Output result of switching branch -- o.e.jgit.pgm.CheckoutTomasz Zarna2012-09-051-1/+1
| | | | Change-Id: I9829950b686ce3b8c70b8f7a1774d5e2b55cd00a Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Merge "Support branches with name 'config'"Christian Halstrick2012-09-031-5/+17
|\
| * Support branches with name 'config'Christian Halstrick2012-08-211-5/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | JGit was not able to lookup refs which had the name of files which exist in the .git folder. When JGit was looking up a ref named X it has a fixed set of directories where it searched for files named X (ignore packed refs for now). First directory to search for is .git. In case of the ref named 'config' it searched there for this file, found it (it's the .git/config file with the repo configuration in it), parsed it, found it is an invalid ref and stopped searching. It never looked for a file .git/refs/heads/config. I changed JGit in a way that when it finds a file in GIT_DIR which corresponds to a ref name and if this file doesn't contain a valid ref then it will ignore the InvalidObjectIdException and continue searching. Change-Id: Ic26a329fb1624a5b2b2494c78bac4bd76817c100 Bug: 381574 Signed-off-by: Christian Halstrick <christian.halstrick@sap.com> Signed-off-by: Stefan Lay <stefan.lay@sap.com>
* | DirCacheCheckout: Fix handling of files not in indexRobin Stocker2012-09-011-14/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a file is not in the index and neither contents nor mode differ between "head" and "merge", the index state should be kept. If they differ, a checkout conflict should occur. This is described in Git's git-read-tree.txt. JGit used to replace the index state with "merge" in both of the above cases. A confusing effect of this was that when one removed a file and then did a rebase, the file silently reappeared again. The changes to dir/file conflict handling are a consequence of this change, as the index handling change made tests in DirCacheCheckoutTest break. I compared these cases to C Git and the new behavior there also matches what C Git does. Bug: 387390 Change-Id: I5beb781f12172a68f98c67d4c8029eb51ceae62d Signed-off-by: Robin Stocker <robin@nibor.org>
* | Create an input stream that transforms LF to CRLFRobin Rosenberg2012-09-011-0/+151
| | | | | | | | | | | | | | | | | | | | | | | | The transformation is the same as AutoCRLFOutputStream does, but the direction is reversed. The tests are reused, but the implementation derives somewhat from the EolCanonicalizingInputStream. This stream will be used to compare blobs with LF line endings with worktree data that has CRLF line endings. Bug: 387501 Change-Id: I80d96e453e7f780dd464a89778de124cf35384e1 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Enhance statistics for repo by sizes and ref-countsChristian Halstrick2012-08-311-5/+40
| | | | | | | | | | | | | | | | The statistics for a repo now expose how many bytes are used in the filesystem to store all loose/packed objects. The number of packed/loose refs are also exposed. Change-Id: I335a4c7630a2629a86f13a2a5cd99f79a2c2afa4
* | Implement a parser for datesChristian Halstrick2012-08-282-2/+240
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In order to parse user specified strings containing date and time info a thread-safe parser is implemented. This is needed for example to interpret configuration parameters (e.g. gc.pruneexpire where need to parse strings like "2 weeks ago"). The parser is thread-safe by caching SimpleDateFormat instances in a ThreadLocal cache. Native git has a parser called approxidate which is able to interpret a huge number of formats ("1 year ago", "tea time", ...). Ideally JGit should be able to parse the same strings as native git but for now this parser understands the following subset: "now" "yesterday" "(x) years|months|weeks|days|hours|minutes|seconds ago" "yyyy-MM-dd HH:mm:ss Z" (ISO) "EEE, dd MMM yyyy HH:mm:ss Z" (RFC) "yyyy-MM-dd" "yyyy.MM.dd" "MM/dd/yyyy" "dd.MM.yyyy" "EEE MMM dd HH:mm:ss yyyy Z" (DEFAULT) "EEE MMM dd HH:mm:ss yyyy" (LOCAL) Change-Id: Iccb66dadb60da13104e73140e53d5e2de068369c
* | Merge "Fix gc's usage of progress monitor"Stefan Lay2012-08-281-22/+27
|\ \
| * | Fix gc's usage of progress monitorMatthias Sohn2012-08-261-22/+27
| | | | | | | | | | | | Change-Id: I8dcdf0b83e91e6132dc490e8ec53818220773c94 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | Enable rebase to continue for all rebase stagesRobin Rosenberg2012-08-271-0/+3
| | | | | | | | | | | | | | | | | | EGit should be able to continue a rebase started by C Git. Change-Id: I63058026295fec34157b5687ae87ae9cb0c27c86 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | Merge "Refactor detection of Windows platform to SystemReader"Matthias Sohn2012-08-265-19/+16
|\ \ \
| * | | Refactor detection of Windows platform to SystemReaderRobin Rosenberg2012-08-225-19/+16
| | | | | | | | | | | | | | | | Change-Id: Id0b8aef92f10572d4f1ec198e0281162fcd7ed4e
* | | | Merge "Set core.precomposeunicode to true when creating repository on Mac"Matthias Sohn2012-08-262-0/+7
|\| | |
| * | | Set core.precomposeunicode to true when creating repository on MacRobin Rosenberg2012-08-222-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Java has no option but to use precomposed Unicode, so we should state that when creating a new repository. Not that Java will use precomposed unicode regardless of this setting, but this reduces the risk of incompatibility with C Git. Change-Id: I3779b75f76d2e2061c836cbc9b4b7c2ae0cf18f4
* | | | Merge "Refactor detection of OS X to SystemReader"Matthias Sohn2012-08-263-18/+18
|\| | | | |/ / |/| |
| * | Refactor detection of OS X to SystemReaderRobin Rosenberg2012-08-223-18/+18
| | | | | | | | | | | | Change-Id: I34e9ba4a26f7af5b88140c070f02a7990f1941af
* | | Merge changes I98df46ce,Ifb815a12,I051a1724Robin Rosenberg2012-08-211-32/+147
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | * changes: Support [<ref>]@{upstream} revision syntax Support parsing previous checkout as a revision expresion. Allow a @ without branch in revision syntax
| * | | Support [<ref>]@{upstream} revision syntaxRobin Rosenberg2012-07-201-1/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Resolves into a ref name corresponding to the named (or current) branch's upstream ref. Change-Id: I98df46cedb498724cf14343fbb168f24ff667929
| * | | Support parsing previous checkout as a revision expresion.Robin Rosenberg2012-07-201-40/+102
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Repository.resolve can only return an ObjectId and will continue to do so, but another method, simplify(), will be able to return a branch name for some cases. Previous checkouts can be specified as @{-n}, where n is an integer speifying the n:th previous branch. The result is the branch name, unless the checkout was a detached head, in which case the object id is returned. Since the result is a branch it may be followed by a references to the reflog, such as @{-1}@{1} if necessary. A simple expression like "master" is resolved to master in simplify, but anything starting with refs gets resolved to its object id, even if it is a branch. A symbolic ref is resolved to its leaf ref, e.g. "HEAD" might be resolved to "master". Change-Id: Ifb815a1247ba2a3e2d9c46249c09be9d47f2b693
| * | | Allow a @ without branch in revision syntaxRobin Rosenberg2012-07-161-3/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | No branch before @ is interpreted as the currently checked out branch. For detached heads it would be HEAD, but normally it is the branch that HEAD refers to. Change-Id: I051a1724fa390b8212e8986ba832b1347a20371e
* | | | Merge "Refactored method to find branches from which a commit is reachable"Robin Rosenberg2012-08-211-0/+73
|\ \ \ \ | |_|_|/ |/| | |
| * | | Refactored method to find branches from which a commit is reachableRobin Rosenberg2012-08-211-0/+73
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | The method uses some heuristics to obtain much better performance than isMergeBase. Since I wrote the relevant code in the method I approve the license change from EPL to EDL implied by the move. Change-Id: Ic4a7584811a2b0bf24e4f6b3eab2a7c022eabee8 Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
* | | Teach BranchTrackingStatus to handle tracking of local branchesMatthias Sohn2012-08-182-6/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | EGit wasn't able to decorate local branches tracking another local branch with number of commits the checked out local branch differs from the other local branch it's tracking. Bug: 376970 Change-Id: I74e932d5eacd74dbf6b0dffcfc65ba3222a8250e Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | Improve ours/theirs conflict markers for rebase, cherry-pickRobin Stocker2012-08-183-7/+79
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On conflicts in rebase or cherry-pick, the conflict markers were like this: <<<<<<< OURS a ======= b >>>>>>> THEIRS This is technically correct, but it could be better. It's especially confusing during a rebase, where the meaning of OURS/THEIRS is not obvious. The intuition is that "ours" is the commits that "I" did before the rebase, but it's the other way around because of the way rebase works. See various bug reports and stackoverflow discussions. With this change, in the case of a cherry-pick while on master, the markers will be like this: <<<<<<< master a ======= b >>>>>>> bad1dea Message of the commit I'm cherry-picking In the case of a "git rebase master": <<<<<<< Upstream, based on master a ======= b >>>>>>> b161dea Message of a commit I'm rebasing It's not "master" because that would only be correct for the first cherry-pick during a rebase, after that, it's master + already cherry-picked commits. And in the case of a "git pull --rebase": <<<<<<< Upstream, based on branch 'master' of git@example.org:repo a ======= b >>>>>>> b161dea Message of a commit I'm rebasing Bug: 336819 Change-Id: I1333a8dd170bb0077f491962013485efb6f2a926 Signed-off-by: Robin Stocker <robin@nibor.org> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Merge changes Ie949f321,I403de522Shawn Pearce2012-08-157-5/+69
|\ \ | | | | | | | | | | | | | | | * changes: Implement wasDeltaAttempted() in DfsObjectRepresentation. Do not delta compress objects that have already tried to compress.
| * | Implement wasDeltaAttempted() in DfsObjectRepresentation.Colby Ranger2012-08-133-1/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | In DFS, everything is stored in a pack but only objects in a pack with source GC or UNREACHABLE_GARBAGE have had delta compression attempted. Expose the PackSource setter and getter on DfsPackDescription in order to implement wasDeltaAttempted. Change-Id: Ie949f321147ad870f1c3f23b552343bbbda32152
| * | Do not delta compress objects that have already tried to compress.Colby Ranger2012-08-134-4/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If an object is in a pack file already, delta compression will not attempt to re-compress it. This assumes that the previous packing already performed the optimal compression attempt, however, the subclasses of StoredObjectRepresentation may use other heuristics to determine if the stored format is optimal. Change-Id: I403de522f4b0dd2667d54f6faed621f392c07786
* | | Fix idOffset when the working tree iterator matches a dircache entryRobin Rosenberg2012-08-151-4/+10
|/ / | | | | | | | | | | idOffset is not zero when idBuffer comes from blob in the dircache Change-Id: Iff768422cba140a5d6a776e2c627b852f079c1da
* | Merge "Allow JGit to read C Git rebase state"Christian Halstrick2012-08-131-1/+8
|\ \
| * | Allow JGit to read C Git rebase stateRobin Rosenberg2012-08-071-1/+8
| | | | | | | | | | | | | | | | | | C Git prefixes the time stamp in the author script with a "@" Change-Id: I140b29519acc101da78296eef562368fc6b61135
* | | Make CheckoutCommand pass modified files through resultMarkus Duft2012-08-072-12/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change makes CheckoutCommand pass the list of modified files through the OK result, enabling outside world to react in a smaller scope (for example refresh only resources containing the modified files). Change-Id: I53c50ee09bc0d3ff501bdc25196e52e739c3f1f9 Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* | | Allow detection of case insensitive file systemsMatthias Sohn2012-08-063-0/+21
| | | | | | | | | | | | | | | | | | Change-Id: I03f59d07bcc3338ef8d392cbd940799186ca03bd Signed-off-by: Matthias Sohn <matthias.sohn@sap.com> Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
* | | Ensure a directory exists before trying to create/merge a file into it.Jevgeni Zelenkov2012-08-061-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since git doesn't keep track of empty directories, they should be created first. Test case included demonstrates that using StashApplyCommand(). Bugfix is applied to the DirCacheCheckout class, because StashApplyCommand() uses it internally to apply a stash. Change-Id: Iac259229ef919f9e92e7e51a671d877172bb88a8 Signed-off-by: Jevgeni Zelenkov <jevgeni.zelenkov@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | Merge "Fix PlotCommit for commits with duplicate parents"Robin Rosenberg2012-08-051-3/+7
|\ \ \ | |/ / |/| |
| * | Fix PlotCommit for commits with duplicate parentsRobin Rosenberg2012-08-051-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | JGit allows to create commits which have duplicate parents: e.g. a commit X has first parent Y and second parent Y. Such commits are not handled correctly by PlotCommit leading to wrong display of the history in EGit. In such cases there is a never ending passing line drawn beside all commits younger than the commit with duplicate parents. This commit fixes this by explicitly checking for duplicate parents. In a different commit we should fix JGit not to create commits with duplicate parents. I think native git also doesn't allow such commits, although history display in native git (gitk, git log --graph) is not damaged by such commits. Change-Id: Ie3019ef613a507023958bea27b1badc3b8950279
* | | Merge "Fix resolving of relative file URIs in TransportLocal"Robin Rosenberg2012-07-291-2/+2
|\ \ \
| * | | Fix resolving of relative file URIs in TransportLocalRobin Stocker2012-07-271-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A configured remote url like "../repo" works with C Git. In JGit, it only worked if Java's current working directory happened to be the local repository working directory. Change-Id: I33ba3f81b37d03cf17ca7ae25a90774a27e7e02b Signed-off-by: Robin Stocker <robin@nibor.org>
* | | | Merge "Garbage collector for FileRepositories"Robin Rosenberg2012-07-294-0/+903
|\ \ \ \
| * | | | Garbage collector for FileRepositoriesChristian Halstrick2012-07-294-0/+903
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implements a garbage collector for FileRepositories. Main ideas are copied from the garbage collector for DFS based repos (DfsGarbageCollector). Added functionalities are - pruning loose objects - handling of the index - packing refs - handling of reflogs (objects referenced from reflog will not be pruned/) These are features of a GC which are not handled in this change and which should come with subsequent changes: - unpacking packed objects into loose objects (to support that pruning packed objects doesn't delete them until they are older than two weeks) - expiration of reflogs - support for configuration parameters (e.g. gc.pruneExpire) Change-Id: I14ea5cb7e0fd1b5c50b994fd77f4e05bfbb9d911 Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
* | | | | Expose some DFS APIs as public or protectedShawn O. Pearce2012-07-273-3/+22
| |/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Expose class DfsReader and method DfsPackFile.hasObject() as public. Applications may want to be able to inquire about some details of the storage of a repository. Make this possible by exposing some simple accessor methods. Expose method DfsObjDatabase.clearCache() as protected, allowing implementing subclasses to dump the cache if necessary, and force it to reload on a future request. Change-Id: Ic592c82d45ace9f2fa5f8d7e4bacfdce96dea969
* | | | Again teach ResolveMerger to create more correct DirCacheEntry'sChristian Halstrick2012-07-261-35/+81
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, after a merge/cherry-pick/rebase, all index entries are smudged as the ResolveMerger never sets entry lengths and/or modification times. This change teaches it to re-set them at least for things it did not touch. The other entries are then repaired when the index is persisted, or entries are checked out. The first attempt to get this in was commit 3ea694c2523d909190b5350e13254a62e94ec5d5 which has been reverted. Since then some fixes to ResolveMerger and a few more tests have been added which check situations where the index is not matching HEAD before we merge. Change-Id: I648fda30846615b3bf688c34274c6cf4bc857832 Signed-off-by: Christian Halstrick <christian.halstrick@sap.com> Also-by: Markus Duft <markus.duft@salomon.at>
* | | | Revert "Teach ResolveMerger to create more correct DirCacheEntry's"Shawn Pearce2012-07-241-74/+26
|/ / / | | | | | | | | | | | | | | | This reverts commit 3ea694c2523d909190b5350e13254a62e94ec5d5 Merges with unmodified subtrees are broken with this commit present. Back it out until a fixed version can be supplied.
* | | Teach ResolveMerger to create more correct DirCacheEntry'sMarkus Duft2012-07-191-26/+74
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, after a merge/cherry-pick/rebase, all index entries are smudged as the ResolveMerger never sets entry lengths and/or modification times. This change teaches it to re-set them at least for things it did not touch. The other entries are then repaired when the index is persisted, or entries are checked out. Change-Id: I0944f2017483d32043d0d09409b13055b5609a4b Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
* | | Make ApplyCommand create missing parent directories for new filesMarkus Duft2012-07-161-0/+2
| |/ |/| | | | | | | | | | | | | | | | | Otherwise applying will fail with a FileNotFoundException, because File.createNewFile() fails with missing parents. Contains change & according test. Change-Id: I970522b549b8bb260ca6720da11f12c57ee8a492 Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* | Rename local variables in Repository.resolveRobin Rosenberg2012-07-131-61/+63
| | | | | | | | | | | | | | This is to prepare for extension. The new names better reflect the content of the variables. Change-Id: Ic2b4741ab33223aa7f239915d9138b254890bf7b
* | Get rid of warning about possible NullPointerExceptionRobin Rosenberg2012-07-131-5/+5
| | | | | | | | | | | | | | Do this by using one of the two references that are dependent of checkReferencedIsReachable. Change-Id: I4f16916c62ed8ea434013925f49fb03fe57b7d7e
* | Merge "Work around smart HTTP bugs in C Git"Shawn O. Pearce2012-07-112-3/+32
|\ \
| * | Work around smart HTTP bugs in C GitShawn O. Pearce2012-06-272-3/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I have unfortunately introduced a few bugs in the native Git client over the years. 1.7.5 is unable to send chunked requests correctly, resulting in corrupt data at the server. Ban this client whenever it uses chunked encoding with an error message. Prior to some more recent versions, git push over HTTP failed to report status information and error messages due to a race within the client and its helper process. Check for these bad versions and send errors as messages before the status report, enabling users to see the failures on their terminal. Change-Id: Ic62d6591cbd851d21dbb3e9b023d655eaecb0624