Patchwork [3,of,3] dirstate: add exception when calling setparent without begin/end

login
register
mail settings
Submitter Durham Goode
Date Sept. 5, 2014, 7:36 p.m.
Message ID <cbc8f6a95fd203e455c5.1409945781@dev2000.prn2.facebook.com>
Download mbox | patch
Permalink /patch/5704/
State Accepted
Headers show

Comments

Durham Goode - Sept. 5, 2014, 7:36 p.m.
# HG changeset patch
# User Durham Goode <durham@fb.com>
# Date 1409942264 25200
#      Fri Sep 05 11:37:44 2014 -0700
# Node ID cbc8f6a95fd203e455c5acd0cf6f6006663af52f
# Parent  ca5a5cd5a9840dd3d391a6204f5e3edb8b097b44
dirstate: add exception when calling setparent without begin/end

Adds an exception when calling dirstate.setparent without having first called
dirstate.beginparentchange. This will prevent people from writing code that
modifies the dirstate parent without considering the transactionality of their
change.

This will break third party extensions that call setparents.

Patch

diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
--- a/mercurial/dirstate.py
+++ b/mercurial/dirstate.py
@@ -243,6 +243,10 @@ 
 
         See localrepo.setparents()
         """
+        if self._parentwriters == 0:
+            raise util.Abort(_("cannot set dirstate parent without " +
+                " calling dirstate.begingparentchange"))
+
         self._dirty = self._dirtypl = True
         oldp2 = self._pl[1]
         self._pl = p1, p2