[PATCH 6 of 9 phases] phase: Add a method to compute rich phase data for dirstate

Pierre-Yves David pierre-yves.david at ens-lyon.org
Wed Jan 4 19:25:43 CST 2012


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at ens-lyon.org>
# Date 1325726360 -3600
# Node ID 14124d106c8873e80ffcdb8e3332f277e53534dc
# Parent  9bedf170a2c4753b01296db5f8dc8141cd3a64ed
phase: Add a method to compute rich phase data for dirstate

This method gather all logic related to new commit phase selection:

* default new commit phase
* parent phase
* dirstate phase

diff --git a/mercurial/phases.py b/mercurial/phases.py
--- a/mercurial/phases.py
+++ b/mercurial/phases.py
@@ -281,3 +281,28 @@
         phaseheads[phase].extend(c.node() for c in revset)
     return phaseheads, phaseroots
 
+def dirstatephase(repo):
+    """return (phase, from) tuple
+
+        phase: a valid phase integer,
+        from: how the value was computed
+        - 'default': current default for new commit,
+        - 'parents': inherited from parent,
+        - 'dirstate': read from dirstate,
+        - 'forced': forced from dirstate content."""
+    phase, force = repo.dirstate.phasedata
+    if force:
+        pfrom = 'forced'
+    else:
+        if phase is None:
+            # get default phase
+            phase = repo.ui.configint('phases', 'new-commit', draft)
+            pfrom = 'default'
+        else:
+            pfrom = 'dirstate'
+        for parent in repo[None].parents():
+            pphase = parent.phase()
+            if pphase >= phase:
+                pfrom = 'parents'
+                phase = pphase
+    return phase, pfrom


More information about the Mercurial-devel mailing list