Rfaulk has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/87658


Change subject: add/fix - _git_revert / revert functionality.
......................................................................

add/fix - _git_revert / revert functionality.

Change-Id: Idcc74c76a12e15c85c2d3853810562cbb8f300bd
---
M sartoris/config.py
M sartoris/sartoris.py
2 files changed, 36 insertions(+), 12 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/sartoris refs/changes/58/87658/1

diff --git a/sartoris/config.py b/sartoris/config.py
index 410277c..e5d4c95 100644
--- a/sartoris/config.py
+++ b/sartoris/config.py
@@ -54,6 +54,8 @@
     30: 'No deploy started. Please run: git deploy start',
     31: 'Failed to write tag on sync. Exiting.',
     32: 'Failed to write the .deploy file. Exiting.',
+    33: 'git revert failed. Exiting.',
+    34: 'git log failed. Exiting.',
     40: 'Failed to run sync script. Exiting.',
     50: 'Failed to read the .deploy file. Exiting.',
     60: 'Invalid git deploy action. Exiting.',
diff --git a/sartoris/sartoris.py b/sartoris/sartoris.py
index 850b07f..21b2a11 100755
--- a/sartoris/sartoris.py
+++ b/sartoris/sartoris.py
@@ -268,10 +268,29 @@
         proc = subprocess.Popen(cmd.split(),
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE)
-        commits = [i.split()[0] for i in 
proc.communicate()[0][:-1].split('\n')]
+        proc_out = proc.communicate()
+
+        if proc.returncode != 0:
+            raise SartorisError(message=exit_codes[34], exit_code=34)
+
+        commits = [i.split()[0] for i in proc_out[0][:-1].split('\n')]
         commits.reverse()
 
         return commits
+
+    def _git_revert(self, commit_sha):
+        """
+        Perform a no-commit revert
+        """
+        cmd = 'git revert --no-commit {0}'.format(commit_sha)
+        proc = subprocess.Popen(cmd.split(),
+                                stdout=subprocess.PIPE,
+                                stderr=subprocess.PIPE)
+
+        proc.communicate()
+
+        if proc.returncode != 0:
+            raise SartorisError(message=exit_codes[33], exit_code=33)
 
     def start(self, args):
         """
@@ -487,17 +506,20 @@
         if tag == '':
             raise SartorisError(message=exit_codes[13], exit_code=13)
 
-        # Reset the HEAD
-        self._dulwich_reset_to_tag(tag)
-
-        # Add changes to staging
-        self._dulwich_stage_all()
-
-        # Commit
-        self._dulwich_commit(self._make_author())
-
-        # Sync to reset HEAD
-        self._sync(revert_tag, args.force)
+        #
+        # Rollback to tag:
+        #
+        #   1. get a commit list
+        #   2. perform no-commit reverts
+        #   3. commit
+        #
+        tag_commit_sha = self._get_commit_sha_for_tag(tag)
+        for commit_sha in self._git_commit_list():
+            if commit_sha == tag_commit_sha:
+                break
+            self._git_revert(commit_sha)
+        self._dulwich_commit(self._make_author(),
+                             message='Rollback to {0}.'.format(tag))
 
         return 0
 

-- 
To view, visit https://gerrit.wikimedia.org/r/87658
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Idcc74c76a12e15c85c2d3853810562cbb8f300bd
Gerrit-PatchSet: 1
Gerrit-Project: sartoris
Gerrit-Branch: master
Gerrit-Owner: Rfaulk <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to