[PATCH] bundle: warn when update to revision existing only in a bundle (issue5004)

liscju piotr.listkiewicz at gmail.com
Thu Mar 24 06:58:14 EDT 2016


# HG changeset patch
# User liscju <piotr.listkiewicz at gmail.com>
# Date 1458719722 -3600
#      Wed Mar 23 08:55:22 2016 +0100
# Node ID 54c0e66ee49f08806488a591f32fa18581fde717
# Parent  78e4e558fa74aa4489609953328cbcecf1a8a428
bundle: warn when update to revision existing only in a bundle (issue5004)

Now its done silently, so unless user really knows what he is doing
will be suprised to find that after update 'hg status' doesn't work.

diff -r 78e4e558fa74 -r 54c0e66ee49f mercurial/bundlerepo.py
--- a/mercurial/bundlerepo.py	Sat Mar 19 08:27:54 2016 -0700
+++ b/mercurial/bundlerepo.py	Wed Mar 23 08:55:22 2016 +0100
@@ -32,6 +32,7 @@ from . import (
     localrepo,
     manifest,
     mdiff,
+    node as nodemod,
     pathutil,
     phases,
     revlog,
@@ -385,6 +386,18 @@ class bundlerepository(localrepo.localre
     def getcwd(self):
         return os.getcwd() # always outside the repo
 
+    def setparents(self, p1, p2=nullid):
+        c = changelog.changelog(self.svfs)
+        nodemap = c.nodemap
+        if p1 not in nodemap:
+            self.ui.warn(_("setting parent to node %s non-existing "
+                           "in the local repository\n")
+                         % nodemod.hex(p1))
+        if p2 and p2 not in nodemap:
+            self.ui.warn(_("setting parent to node %s non-existing "
+                           "in the local repository\n")
+                         % nodemod.hex(p2))
+        return localrepo.localrepository.setparents(self, p1, p2)
 
 def instance(ui, path, create):
     if create:
diff -r 78e4e558fa74 -r 54c0e66ee49f tests/test-bundle.t
--- a/tests/test-bundle.t	Sat Mar 19 08:27:54 2016 -0700
+++ b/tests/test-bundle.t	Wed Mar 23 08:55:22 2016 +0100
@@ -733,3 +733,29 @@ bundle single branch
   $ hg bundle -r 'public()' no-output.hg
   abort: no commits to bundle
   [255]
+
+  $ cd ..
+
+When user updates to the revision existing only in the bundle,
+it should show warning
+
+  $ hg init updates_to_bundle_revision
+  $ cd updates_to_bundle_revision
+  $ cat <<EOF >> .hg/hgrc
+  > [extensions]
+  > strip =
+  > EOF
+  $ hg --config ui.allowemptycommit=true commit -m 0
+  $ hg --config ui.allowemptycommit=true commit -m 1
+  $ hg strip -r tip
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  saved backup bundle to $TESTTMP/updates_to_bundle_revision/.hg/strip-backup/49086794b4c6-62b96ebe-backup.hg (glob)
+  $ hg update -R .hg/strip-backup/*.hg -r 1
+  setting parent to node 49086794b4c611e893d89e1719072591c753019d non-existing in the local repository
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+When user updates to the revision existing in the local repository as well,
+the warning shouldn't be emitted
+
+  $ hg update -R .hg/strip-backup/*.hg -r 0
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved


More information about the Mercurial-devel mailing list