git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [JGIT PATCH 8/8] Define a basic merge API, and a two-way tree merge strategy

From
TPTomi Pakarinen <tomi.pakarinen@gmail.com>
Date
Jan 17, 2009, 19:16 UTC
Message-ID
<f299b4f30901171116y216835c9jc11df2d424ee0377@mail.gmail.com>
In-Reply-To
<20090115210936.GI10179@spearce.org>

testTrivialTwoWay_disjointhistories() failed because merge strategy didn't handle missing base version. Am'i right?

  Tomi.
>From 1ed694b55d307c640d29eeebfcd108e08681297b Mon Sep 17 00:00:00 2001
From: Tomi Pakarinen <tomi.pakarinen@iki.fi>
Date: Sat, 17 Jan 2009 20:56:04 +0200
Subject: [PATCH] If base version missing, we can merge version from
one of other trees.
Signed-off-by: Tomi Pakarinen <tomi.pakarinen@iki.fi>
---
 .../jgit/merge/StrategySimpleTwoWayInCore.java     |   28 +++++++++++++++-----
 1 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/merge/StrategySimpleTwoWayInCore.java
b/org.spearce.jgit/src/org/spearce/jgit/merge/StrategySimpleTwoWayInCore.java
index 893add9..eb718ab 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/merge/StrategySimpleTwoWayInCore.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/merge/StrategySimpleTwoWayInCore.java
@@ -43,6 +43,7 @@
 import org.spearce.jgit.dircache.DirCacheBuilder;
 import org.spearce.jgit.dircache.DirCacheEntry;
 import org.spearce.jgit.errors.UnmergedPathException;
+import org.spearce.jgit.lib.FileMode;
 import org.spearce.jgit.lib.ObjectId;
 import org.spearce.jgit.lib.Repository;
 import org.spearce.jgit.treewalk.AbstractTreeIterator;
@@ -119,13 +120,26 @@ protected boolean mergeImpl() throws IOException {
 				}

 				final int modeB = tw.getRawMode(T_BASE);
-				if (modeB == modeO && tw.idEqual(T_BASE, T_OURS))
-					add(T_THEIRS, DirCacheEntry.STAGE_0);
-				else if (modeB == modeT && tw.idEqual(T_BASE, T_THEIRS))
-					add(T_OURS, DirCacheEntry.STAGE_0);
-				else {
-					conflict();
-					hasConflict = true;
+				if (!FileMode.MISSING.equals(modeB)) {
+					if (modeB == modeO && tw.idEqual(T_BASE, T_OURS))
+						add(T_THEIRS, DirCacheEntry.STAGE_0);
+					else if (modeB == modeT && tw.idEqual(T_BASE, T_THEIRS))
+						add(T_OURS, DirCacheEntry.STAGE_0);
+					else {
+						conflict();
+						hasConflict = true;
+					}
+				} else {
+					if (!FileMode.MISSING.equals(modeO)
+							&& FileMode.MISSING.equals(modeT))
+						add(T_OURS, DirCacheEntry.STAGE_0);
+					else if (FileMode.MISSING.equals(modeO)
+							&& !FileMode.MISSING.equals(modeT))
+						add(T_THEIRS, DirCacheEntry.STAGE_0);
+					else {
+						conflict();
+						hasConflict = true;
+					}
 				}
 			}
 			builder.finish();
-- 
1.6.0.4
Previous: Shawn O. PearceNext: Robin Rosenberg
Message 13 of 16 in “Crude merge support”
  1. 0/8 Crude merge supportShawn O. Pearce, Oct 13, 2008
  2. 1/8 Expose the raw path for the current entry of a TreeWalkShawn O. Pearce, Oct 13, 2008
  3. 2/8 Expose DirCacheEntry.getFileMode as a utility functionShawn O. Pearce, Oct 13, 2008
  4. 3/8 Add writeTree support to DirCacheShawn O. Pearce, Oct 13, 2008
  5. 4/8 Allow a DirCache to be created with no backing store fileShawn O. Pearce, Oct 13, 2008
  6. 5/8 Allow CanonicalTreeParsers to be created with a UTF-8 path prefixShawn O. Pearce, Oct 13, 2008
  7. 6/8 Recursively load an entire tree into a DirCacheBuilderShawn O. Pearce, Oct 13, 2008
  8. 7/8 Allow DirCacheEntry instances to be created with stage > 0Shawn O. Pearce, Oct 13, 2008
  9. 8/8 Define a basic merge API, and a two-way tree merge strategyShawn O. Pearce, Oct 13, 2008
  10. Robin RosenbergOct 23, 2008
  11. Robin RosenbergJan 15, 2009
  12. Shawn O. PearceJan 15, 2009
  13. Tomi PakarinenJan 17, 2009
  14. Robin RosenbergJan 18, 2009
  15. Shawn O. PearceJan 19, 2009
  16. Shawn O. PearceJan 19, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.