[PATCH 13 of 21 RFC] merge: linear updates to censored data revisions produce empty files

michaeljedgar at gmail.com michaeljedgar at gmail.com
Wed Sep 10 19:26:14 CDT 2014


# HG changeset patch
# User Mike Edgar <adgar at google.com>
# Date 1410322526 14400
#      Wed Sep 10 00:15:26 2014 -0400
# Node ID 4004f1fed45d6ea2a88272895a5e12ccf28cad0c
# Parent  c81c9a42fb6f1b2f402e4e6607fe2a531469b08e
merge: linear updates to censored data revisions produce empty files

The same configuration check done in verify is done in update to determine if
the update should be rejected or should substitute the empty file.

diff -r c81c9a42fb6f -r 4004f1fed45d mercurial/merge.py
--- a/mercurial/merge.py	Wed Sep 10 00:17:54 2014 -0400
+++ b/mercurial/merge.py	Wed Sep 10 00:15:26 2014 -0400
@@ -7,10 +7,11 @@
 
 import struct
 
-from node import nullid, nullrev, hex, bin
+from node import nullid, nullrev, hex, bin, short
 from i18n import _
 from mercurial import obsolete
 import error as errormod, util, filemerge, copies, subrepo, worker, dicthelpers
+import censor
 import errno, os, shutil
 
 _pack = struct.pack
@@ -597,7 +598,15 @@
         repo.ui.debug(" %s: %s -> g\n" % (f, msg))
         if verbose:
             repo.ui.note(_("getting %s\n") % f)
-        wwrite(f, fctx(f).data(), args[0])
+        try:
+            data = fctx(f).data()
+        except errormod.CensoredNodeError, e:
+            if not censor.allowed(repo, f, e.node):
+                raise util.Abort(_('file %s censored at revision %s')
+                                 % (f, short(mctx.node())))
+            repo.ui.warn(_('warning: censored file is empty: %s\n') % f)
+            data = ''
+        wwrite(f, data, args[0])
         if i == 100:
             yield i, f
             i = 0


More information about the Mercurial-devel mailing list