merge with stable
authorMartin von Zweigbergk <martinvonz@google.com>
Thu, 21 Jun 2018 09:32:31 -0700
changeset 38426 00368bc0a614
parent 38424 4f885770c4a2 (current diff)
parent 38425 1322ae04d3d7 (diff)
child 38427 4b73f316ba0e
merge with stable
mercurial/crecord.py
mercurial/merge.py
tests/test-commit-interactive-curses.t
--- a/mercurial/cext/manifest.c	Tue Jun 19 13:49:06 2018 -0700
+++ b/mercurial/cext/manifest.c	Thu Jun 21 09:32:31 2018 -0700
@@ -135,12 +135,22 @@
 	return 0;
 }
 
+static void lazymanifest_init_early(lazymanifest *self)
+{
+	self->pydata = NULL;
+	self->lines = NULL;
+	self->numlines = 0;
+	self->maxlines = 0;
+}
+
 static int lazymanifest_init(lazymanifest *self, PyObject *args)
 {
 	char *data;
 	Py_ssize_t len;
 	int err, ret;
 	PyObject *pydata;
+
+	lazymanifest_init_early(self);
 	if (!PyArg_ParseTuple(args, "S", &pydata)) {
 		return -1;
 	}
@@ -668,6 +678,7 @@
 	if (!copy) {
 		goto nomem;
 	}
+	lazymanifest_init_early(copy);
 	copy->numlines = self->numlines;
 	copy->livelines = self->livelines;
 	copy->dirty = false;
@@ -705,6 +716,7 @@
 	if (!copy) {
 		goto nomem;
 	}
+	lazymanifest_init_early(copy);
 	copy->dirty = true;
 	copy->lines = malloc(self->maxlines * sizeof(line));
 	if (!copy->lines) {
--- a/mercurial/crecord.py	Tue Jun 19 13:49:06 2018 -0700
+++ b/mercurial/crecord.py	Thu Jun 21 09:32:31 2018 -0700
@@ -403,7 +403,7 @@
         if fromline != 0:
             if fromlen == 0:
                 fromline -= 1
-            if tolen == 0:
+            if tolen == 0 and toline > 0:
                 toline -= 1
 
         fromtoline = '@@ -%d,%d +%d,%d @@%s\n' % (
--- a/mercurial/merge.py	Tue Jun 19 13:49:06 2018 -0700
+++ b/mercurial/merge.py	Thu Jun 21 09:32:31 2018 -0700
@@ -1150,8 +1150,10 @@
     copied = set(copy.values())
     copied.update(movewithdir.values())
 
-    if '.hgsubstate' in m1:
-        # check whether sub state is modified
+    if '.hgsubstate' in m1 and wctx.rev() is None:
+        # Check whether sub state is modified, and overwrite the manifest
+        # to flag the change. If wctx is a committed revision, we shouldn't
+        # care for the dirty state of the working directory.
         if any(wctx.sub(s).dirty() for s in wctx.substate):
             m1['.hgsubstate'] = modifiednodeid
 
--- a/tests/test-commit-interactive-curses.t	Tue Jun 19 13:49:06 2018 -0700
+++ b/tests/test-commit-interactive-curses.t	Thu Jun 21 09:32:31 2018 -0700
@@ -214,6 +214,14 @@
   @@ -0,0 +1,1 @@
   +hello world
 
+Make file empty
+  $ printf "" > x
+  $ cat <<EOF >testModeCommands
+  > X
+  > EOF
+  $ hg ci -i -m emptify -d "0 0"
+  $ hg update -C '.^' -q
+
 Editing a hunk puts you back on that hunk when done editing (issue5041)
 To do that, we change two lines in a file, pretend to edit the second line,
 exit, toggle the line selected at the end of the edit and commit.
@@ -236,7 +244,7 @@
   > X
   > EOF
   $ printf "printf 'editor ran\n'; exit 0" > editor.sh
-  $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit  -i -m "edit hunk" -d "0 0"
+  $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit  -i -m "edit hunk" -d "0 0" -q
   editor ran
   $ hg cat -r . x
   foo
--- a/tests/test-subrepo.t	Tue Jun 19 13:49:06 2018 -0700
+++ b/tests/test-subrepo.t	Thu Jun 21 09:32:31 2018 -0700
@@ -1941,3 +1941,43 @@
   updating to branch default
   abort: potentially unsafe url: 'ssh://-oProxyCommand=touch owned@example.com/path' (in subrepository "s")
   [255]
+
+Test convert subrepositories including merge (issue5526):
+
+  $ hg init tconv
+  $ hg convert --config extensions.convert= -q t/s tconv/s
+  $ hg convert --config extensions.convert= -q t/s/ss tconv/s/ss
+  $ hg convert --config extensions.convert= -q t/t tconv/t
+
+ convert shouldn't fail because of pseudo filenode:
+
+  $ hg convert --config extensions.convert= t tconv
+  scanning source...
+  sorting...
+  converting...
+  17 0
+  16 1
+  15 2
+  14 3
+  13 4
+  12 5
+  11 6
+  10 7
+  9 8
+  8 9
+  7 10
+  6 11
+  5 12
+  4 13
+  3 rm2
+  2 phasecheck4
+  1 16
+  0 branch before subrepo add
+
+ converted .hgsubstate should point to valid nodes:
+
+  $ hg up -R tconv 9
+  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ cat tconv/.hgsubstate
+  fc627a69481fcbe5f1135069e8a3881c023e4cf5 s
+  60ca1237c19474e7a3978b0dc1ca4e6f36d51382 t