aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java
Commit message (Collapse)AuthorAgeFilesLines
* [errorprone] Fix error pattern JdkObsoleteMatthias Sohn2024-04-291-2/+2
| | | | | | See https://errorprone.info/bugpattern/JdkObsolete Change-Id: Id105e2695eb64523bd217f507bf95f909bc6b348
* Use git config core.commentCharThomas Wolf2022-03-261-1/+5
| | | | | | | | | | | | | This concerns committing, creating merge conflict messages and creating and editing squash messages. In a squash message, once the comment character has been determined initially is always the first character. Note that if core.commentChar=auto and there is a sequence of squashes, it may be necessary to change the comment character when a new message is added. Bug: 579325 Change-Id: Idca19284a0240cd322e7512ea299a03658e1b2c1 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Merge conflict messages: prefix conflict lines with a hashThomas Wolf2022-01-311-1/+1
| | | | | | | | C git also does so. Note that currently the comment character is hard-coded as the hash '#' throughout JGit. Bug: 548529 Change-Id: I4a5597694082a9e5b07412b365cfaf41fa034cfa Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Add git config for conflict style merge/diff3Thomas Wolf2021-05-031-0/+14
| | | | | | | Add a constant in ConfigConstants, and a ConflictStyle enum in MergeCommand. Change-Id: Idf8e036b6b6953bec06d6923a39e5ff30c2da562 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Implement ours/theirs content conflict resolutionThomas Wolf2021-04-191-2/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | Git has different conflict resolution strategies: * There is a tree merge strategy "ours" which just ignores any changes from theirs ("-s ours"). JGit also has the mirror strategy "theirs" ignoring any changes from "ours". (This doesn't exist in C git.) Adapt StashApplyCommand and CherrypickCommand to be able to use those tree merge strategies. * For the resolve/recursive tree merge strategies, there are content conflict resolution strategies "ours" and "theirs", which resolve any conflict hunks by taking the "ours" or "theirs" hunk. In C git those correspond to "-Xours" or -Xtheirs". Implement that in MergeAlgorithm, and add API to set and pass through such a strategy for resolving content conflicts. * The "ours/theirs" content conflict resolution strategies also apply for binary files. Handle these cases in ResolveMerger. Note that the content conflict resolution strategies ("-X ours/theirs") do _not_ apply to modify/delete or delete/modify conflicts. Such conflicts are always reported as conflicts by C git. They do apply, however, if one side completely clears a file's content. Bug: 501111 Change-Id: I2c9c170c61c440a2ab9c387991e7a0c3ab960e07 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Update EDL 1.0 license headers to new short SPDX compliant formatMatthias Sohn2020-01-041-38/+5
| | | | | | | | | | This is the format given by the Eclipse legal doc generator [1]. [1] https://www.eclipse.org/projects/tools/documentation.php?id=technology.jgit Bug: 548298 Change-Id: I8d8cabc998ba1b083e3f0906a8d558d391ffb6c4 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Enable and fix "Statement unnecessarily nested within else clause" warningsDavid Pursehouse2019-10-171-20/+17
| | | | | | | | | | | | | | | Since [1] the gerrit project includes jgit as a submodule, and has this warning enabled, resulting in 100s of warnings in the console. Also enable the warning here, and fix them. At the same time, add missing braces around adjacent and nearby one-line blocks. [1] https://gerrit-review.googlesource.com/c/gerrit/+/227897 Change-Id: I81df3fc7ed6eedf6874ce1a3bedfa727a1897e4c Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Fix typos in JavadocMichael Keppler2019-07-081-2/+2
| | | | | Change-Id: I225e04aefd02e56a62e16f3db53fdda77d5e7253 Signed-off-by: Michael Keppler <Michael.Keppler@gmx.de>
* Repository: Deprecate #peel methodDavid Pursehouse2018-05-221-1/+1
| | | | | | | | | | | | | | Callers should use getRefDatabase().peel(ref) instead since it doesn't swallow the IOException. Adapt all trivial callers to user the alternative. DescribeCommand still uses the deprecated method and is not adapted in this change since it will require more refactoring to add handling of the IOException. Change-Id: I14d4a95a5e0570548753b9fc5c03d024dc3ff832 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Handle Gerrit Change-Ids for merge commitsThomas Wolf2018-04-181-0/+20
| | | | | | | | Otherwise successful, non-conflicting merges will never get a Gerrit Change-Id. Bug: 358206 Change-Id: I9b599ad01d9f7332200c1d81a1ba6ce5ef990ab5 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* MergeCommand: Open RevWalk in try-with-resourceDavid Pursehouse2018-03-071-6/+1
| | | | | Change-Id: I45ce481cc198b8dc78e9c46b433504840597e982 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Progress reporting for checkoutMarkus Duft2018-01-231-0/+3
| | | | | | | | | | | | | | The reason for the change is LFS: when using a lot of LFS files, checkout can take quite some time on larger repositories. To avoid "hanging" UI, provide progress reporting. Also implement (partial) progress reporting for cherry-pick, reset, revert which are using checkout internally. The feature is also useful without LFS, so it is independent of it. Change-Id: I021e764241f3c107eaf2771f6b5785245b146b42 Signed-off-by: Markus Duft <markus.duft@ssi-schaefer.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix javadoc in org.eclipse.jgit annotations and api packagesMatthias Sohn2017-12-181-12/+24
| | | | Change-Id: I2761ea91f8dfed16ea54e7a6646af03a30c15ec9 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Send a detailed event on working tree modificationsThomas Wolf2017-08-151-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently there is no way to determine the precise changes done to the working tree by a JGit command. Only the CheckoutCommand actually provides access to the lists of modified, deleted, and to-be-deleted files, but those lists may be inaccurate (since they are determined up-front before the working tree is modified) if the actual checkout then fails halfway through. Moreover, other JGit commands that modify the working tree do not offer any way to figure out which files were changed. This poses problems for EGit, which may need to refresh parts of the Eclipse workspace when JGit has done java.io file operations. Provide the foundations for better file change tracking: the working tree is modified exclusively in DirCacheCheckout. Make it emit a new type of RepositoryEvent that lists all files that were modified or deleted, even if the checkout failed halfway through. We update the 'updated' and 'removed' lists determined up-front in case of file system problems to reflect the actual state of changes made. EGit thus can register a listener for these events and then knows exactly which parts of the Eclipse workspace may need to be refreshed. Two commands manage checking out individual DirCacheEntries themselves: checkout specific paths, and applying a stash with untracked files. Make those two also emit such a new WorkingTreeModifiedEvent. Furthermore, merges may modify files, and clean, rm, and stash create may delete files. CQ: 13969 Bug: 500106 Change-Id: I7a100aee315791fa1201f43bbad61fbae60b35cb Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Improve javadoc for MergeCommand.setFastForward()Matthias Sohn2017-06-151-3/+7
| | | | | | | | - mark parameter to be nullable - explain that we fallback to value of merge.ff if set to null and to --ff if also not configured there Change-Id: Id077763b95195d21543ac637f9939a6d4179e982 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Enable and fix warnings about redundant specification of type argumentsDavid Pursehouse2017-02-201-1/+1
| | | | | | | | | | Since the introduction of generic type parameter inference in Java 7, it's not necessary to explicitly specify the type of generic parameters. Enable the warning in Eclipse, and fix all occurrences. Change-Id: I9158caf1beca5e4980b6240ac401f3868520aad0 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Enable and fix 'Should be tagged with @Override' warningDavid Pursehouse2017-02-191-0/+3
| | | | | | | | | | | | | | | | | | | | | | | Set missingOverrideAnnotation=warning in Eclipse compiler preferences which enables the warning: The method <method> of type <type> should be tagged with @Override since it actually overrides a superclass method Justification for this warning is described in: http://stackoverflow.com/a/94411/381622 Enabling this causes in excess of 1000 warnings across the entire code-base. They are very easy to fix automatically with Eclipse's "Quick Fix" tool. Fix all of them except 2 which cause compilation failure when the project is built with mvn; add TODO comments on those for further investigation. Change-Id: I5772061041fd361fe93137fd8b0ad356e748a29c Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Don't rely on default locale when using toUpperCase() and toLowerCase()Matthias Sohn2017-01-281-1/+2
| | | | | | | | | | | | | | | | Otherwise these methods may produce unexpected results if used for strings that are intended to be interpreted locale independently. Examples are programming language identifiers, protocol keys, and HTML tags. For instance, "TITLE".toLowerCase() in a Turkish locale returns "t\u0131tle", where '\u0131' is the LATIN SMALL LETTER DOTLESS I character. See https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#toLowerCase-- http://blog.thetaphi.de/2012/07/default-locales-default-charsets-and.html Bug: 511238 Change-Id: Id8d8f37d84d62239c918b81f8d883ed798d87656 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Implement auto gcMatthias Sohn2016-10-231-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With the auto option, gc checks whether any housekeeping is required; if not, it exits without performing any work. Some JGit commands run gc --auto after performing operations that could create many loose objects. Housekeeping is required if there are too many loose objects or too many packs in the repository. If the number of loose objects exceeds the value of the gc.auto option jgit's GC consolidates all existing packs into a single pack (equivalent to -A option), whereas git-core would combine all loose objects into a single pack using repack -d -l. Setting the value of gc.auto to 0 disables automatic packing of loose objects. If the number of packs exceeds the value of gc.autoPackLimit, then existing packs (except those marked with a .keep file) are consolidated into a single pack by using the -A option of repack. Setting gc.autoPackLimit to 0 disables automatic consolidation of packs. Like git the following jgit commands run auto gc: - fetch - merge - rebase - receive-pack The auto gc for receive-pack can be suppressed by setting the config option receive.autogc = false Change-Id: I68a2a051b39ec2c53cb7c4b8f6c596ba65eeba5d Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Replace use of deprecated method Repository.getRef()Matthias Sohn2016-05-311-1/+1
| | | | Change-Id: Iecf2b8deafc4991cc3333702fb9fa0638be7b914 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Add progress monitor to MergerLaurent Delaigue2016-01-211-0/+25
| | | | | | | | | | | | Monitoring progress of merges can be useful for users for large repositories or complex merge processes that take some time. This enables setting a monitor. Existing merge implementations in jgit do not yet report progress if a monitor is set. This will be added in a later change. Change-Id: I17b978b3fc91750dd88649638b90a46820a0877c Signed-off-by: Laurent Delaigue <laurent.delaigue@obeo.fr> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Use AutoClosable to close resources in bundle org.eclipse.jgitMatthias Sohn2015-05-211-4/+6
| | | | | | | - use try-with-resource where possible - replace use of deprecated release() by close() Change-Id: I0f139c3535679087b7fa09649166bca514750b81 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Rename local variables/parameters to remove warnings about hidingRobin Rosenberg2014-09-041-9/+9
| | | | Change-Id: I73f38492b6a2e7fd6e77005efd0a8a8c65763e74
* Handle -m option for Merge commandAxel Richard2014-08-301-2/+21
| | | | | | | | | Set the commit message to be used for the merge commit (in case one is created) Bug: 442886 Change-Id: Ie5ecc13822faa366f00b3daa07f74c8441cae195 Signed-off-by: Axel Richard <axel.richard@obeo.fr> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Cleanup javadocs so they pass the java8 doclint checksRobin Rosenberg2014-03-291-3/+3
| | | | | | Bug: 431552 Change-Id: I469316f5645205016e1fa6b0fbd2ff3b509b14bc Signed-off-by: Robin Stocker <robin@nibor.org>
* Use branch.<x>.mergeoptions and merge.ff as defaults for mergingKonrad Kügler2014-02-141-6/+23
| | | | | | | | | Read options that control squashing, whether or not to commit the merge and regarding fast forwarding from the configuration and use them if no explicit values for these options have been provided to MergeCommand. Change-Id: Ifdaed4b5e4adc142657c03c8e78b709a99eeddbd Signed-off-by: Konrad Kügler <swamblumat-eclipsebugs@yahoo.de> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix exception on conflicts with recursive mergeRobin Stocker2013-12-031-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | When there are conflicts with a recursive merge, the conflicting paths are stored in unmergedPaths (field in ResolveMerger). Later, when the MergeResult is constructed in MergeCommand, getBaseCommit is called, which computes the merge base a second time. In case of RecursiveMerger, getBaseCommit merges the multiple merge bases into one. It does this not by creating a new ResolveMerger but instead calling mergeTrees. The problem with mergeTrees is that at the end, it checks if unmergedPaths is non-empty and returns false in that case. Because unmergedPaths was already non-empty because of the real merge, it thinks that there were conflicts when computing the merge base again, when there really were none. This can be fixed by storing the base commit when computing it and then returning that instead of computing it a second time. Note that another possible fix would be to just use a new ResolveMerger for merging the merge bases instead. This would also remove the need to remember the old value of dircache, inCore and workingTreeIterator (see RecursiveMerger#getBaseCommit). Bug: 419641 Change-Id: Ib2ebf4e177498c22a9098aa225e3cfcf16bbd958 Signed-off-by: Robin Stocker <robin@nibor.org>
* Make recursive merge strategy the default merge strategyMatthias Sohn2013-04-151-1/+1
| | | | | | | | Use recursive merge as the default strategy since it can successfully merge more cases than the resolve strategy can. This is also the default in native Git. Change-Id: I38fd522edb2791f15d83e99038185edb09fed8e1 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Add the no-commit option to MergeCommandTomasz Zarna2013-04-041-8/+37
| | | | | | | | | | Added also tests and the associated option for the command line Merge command. Bug: 335091 Change-Id: Ie321c572284a6f64765a81674089fc408a10d059 Signed-off-by: Christian Halstrick <christian.halstrick@sap.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Really handle annotated tags in MergeCommandRobin Rosenberg2013-02-081-0/+1
| | | | | | Repository.peel() must be called to ensure a tag is really peeled. Change-Id: I83e25f09fad3ad55a3ffe41ab4758f249b7ac9f9
* Fix Check for FF_ONLY merges againRobin Rosenberg2013-01-291-1/+1
| | | | | | Added more FF-mode tests Change-Id: I33eed5737d9411cc1cf214da62ce719916a1b736
* Check for FF_ONLY merges correctlyRobin Rosenberg2013-01-291-2/+2
| | | | | Bug: 398192 Change-Id: I1253c0ea0632185bbf9f77e32f13ba5842a6e18e
* Add additional FastForwardMode enums for different config contextsTomasz Zarna2013-01-181-3/+75
| | | | | | | | FastForwardMode is represented by different strings depending on context it is set or get from. E.g. FastForwardMode.FF_ONLY for branch.<name>.mergeoptions is "--ff-only" but for merge.ff it is "only". Change-Id: I39ae93578e4783de80ebf4af29ae23b3936eec47
* Revert "Add additional FastForwardMode enums for different config contexts"Shawn Pearce2013-01-111-116/+0
| | | | | | This reverts commit c98abc9c0586c73ef7df4172644b7dd21c979e9d. Change-Id: I1d2a0de81eb17860ee36b6d3d3c00959b880fb85
* Add additional FastForwardMode enums for different config contextsTomasz Zarna2013-01-061-0/+116
| | | | | | | FastForwardMode should be represented by different enums depending on context it is set or get from. E.g. FastForwardMode.FF_ONLY for branch.<name>.mergeoptions is "--ff-only" but for merge.ff it is "only". Change-Id: I3ecc16d48e715b81320b73ffae4caf3558f965f2
* Mark non-externalizable strings as suchRobin Rosenberg2012-12-271-7/+7
| | | | | | | | | | A few classes such as Constanrs are marked with @SuppressWarnings, as are toString() methods with many liternal, but otherwise $NLS-n$ is used for string containing text that should not be translated. A few literals may fall into the gray zone, but mostly I've tried to only tag the obvious ones. Change-Id: I22e50a77e2bf9e0b842a66bdf674e8fa1692f590
* Add support for --no-ff while mergingTomasz Zarna2012-11-161-10/+66
| | | | | | Bug: 394432 Change-Id: I373128c0ba949f9b24248874f77f3d68b50ccfd1 Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Add "--squash" option to MergeCommandTomasz Zarna2012-06-151-16/+74
| | | | | | | CQ: 6570 Bug: 351806 Change-Id: I5e47810376419264ecf4247b5a333af5c8945080 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Git API does not declare GitAPIException call() and related cleanupsRobin Rosenberg2012-05-301-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | All commands should throw a GitAPIException so new exceptions can be added without breaking the builds of old code, i.e. anyone that calls a Git API should catch GitAPIException and not just the currently known exceptions. Now the only checked exceptions on Git API calls are GitException and subclasses of it. New checked exceptions that are subclasses of GitException may be added without breaking the API. Javadoc for GitAPIException is declared on GitCommand and inherited to subclasses. JGitInternalException is not explicitly documented anymore. Unfortunately this change itself breaks the API. The intention is that it shall be possible to add new checked subclasses of GitAPIException without breaking the API. Bug: 366914 EGit-Change-Id: I50380f13fc82c22d0036f47c7859cc3a77e767c5 Change-Id: I50380f13fc82c22d0036f47c7859cc3a77e767c5 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Move JGitText to an internal packageRobin Rosenberg2012-03-121-1/+1
| | | | Change-Id: I763590a45d75f00a09097ab6f89581a3bbd3c797
* Throw API exception when MergeCommand hits checkout conflicts Matthias Sohn2011-12-081-3/+9
| | | | | | | | | | | When MergeCommand hit checkout conflicts it did throw an internal JGit exception org.eclipse.jgit.errors.CheckoutConflictException instead of org.eclipse.jgit.api.errors.CheckoutConflictException which it declares to throw. Hence translate the internal exception to the exception declared in the API. Bug: 327573 Change-Id: I1efcd93a43ecbf4a40583e0fc9d8d53cffc98cae Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Append merge strategy to reflog messageRobin Rosenberg2011-09-211-1/+3
| | | | | | Change-Id: Ia0e73208b86c45a3d96698e973f6e70ec5cb7303 Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix the reflog prefix for cherry-pick, revert and merge commandsRobin Rosenberg2011-09-211-1/+3
| | | | | | | | | We should see whether the commit was a regular commit or something else. Change-Id: I82d8300cf3c53cb2bdcb6495386aadb803e0c6f7 Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix ClassCastException in MergeCommandDenys Digtiar2011-08-211-3/+2
| | | | | | | | | | Test was added which reproduce the ClassCastException when ours or theirs merge strategy is set to MergeCommand. Merger and MergeCommand were updated in order to avoid exception. Change-Id: I4c1284b4e80d82638d0677a05e5d38182526d196 Signed-off-by: Denys Digtiar <duemir@gmail.com> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* Add "Conflicts" section to merge message on conflictRobin Stocker2011-04-061-3/+11
| | | | | | | | The same as with cherry-pick, the commit message of a merge should include a "Conflicts" section when the merge resulted in conflicts. Change-Id: I6261dc898262322924af5ca1bef841a654b0df55 Signed-off-by: Robin Stocker <robin@nibor.org>
* Improve MergeResultPhilipp Thun2011-03-211-1/+1
| | | | | | | | | Add paths causing abnormal merge failures (e.g. due to unstaged changes) to the MergeResult returned by MergeCommand. This helps callers to better handle (e.g. present) merge results. Change-Id: Idb8cf04c5cecfb6a12cb880e16febfc3b9358564 Signed-off-by: Philipp Thun <philipp.thun@sap.com>
* MergeCommand should create missing branchesChristian Halstrick2011-01-261-2/+25
| | | | | | | | | | | | | | | | | If HEAD exists but points to an not-existing branch the merge command should silently create the missing branch and check it out. This happens if you pull into freshly initalized repo. HEAD points to refs/heads/master but refs/heads/master doesn't exist. If you know merge a commit X into HEAD then the branch master should be created (pointing to X) the working tree should be updated to reflect X. That is achieved by checkout with one tree only (HEAD is missing). A test for this functionality will come the the next proposal in PullCommandTest. Change-Id: Id4a0d56d944e0acebd4b3157428bb50bd3fdd872 Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
* Fix misc spelling errors in comments and method namesRobin Rosenberg2011-01-171-1/+1
| | | | | Change-Id: I24552443710075856540696717ac4068dfe6a7f2 Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
* Format merge commit messages like C GitRobin Stocker2010-11-061-3/+5
| | | | | | | | | | | | | | | | | The automatically generated commit message of a merge should have the same structure as in C Git for consistency (as per git fmt-merge-msg). Before this change: merging refs/heads/a into refs/heads/master After: Merge branch 'a' Plurals, "into" and joining by "," and "and" also work. Change-Id: I9658ce2817adc90d2df1060e8ac508d7bd0571cb
* Rename method to ResolveMerger.setWorkingTreeIterator()Christian Halstrick2010-10-131-1/+1
| | | | | | | renamed an ugly methodname Change-Id: I26bda06ef64b8644fd3a555dc55dff43cdb56a71 Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>