aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcpettet <rush@wikimedia.org>2015-01-30 13:18:05 -0600
committercpettet <rush@wikimedia.org>2015-01-30 13:18:31 -0600
commitd0f4893d45b1504cf28b6c131180d16b4c4850f9 (patch)
tree5187243826fdc7df252436c33812ebb504e2d16b
parentdb3acec9dd6c2c0150ffb52a8b587bb5befd34a8 (diff)
tooling in support of T87291
regarding operations project cleanup Change-Id: I9273e8a31c2bfa5569739848cfdc83d86625c8cb
-rw-r--r--project_merge.py30
-rwxr-xr-xwmfphablib/phabdb.py22
2 files changed, 52 insertions, 0 deletions
diff --git a/project_merge.py b/project_merge.py
new file mode 100644
index 0000000..f42830a
--- /dev/null
+++ b/project_merge.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python
+
+""""
+
+This script merges two projects in Phab "the hard way"
+
+project_merg.py <old_project> <new_project>
+
+* Projects must pre-exist
+* Will not remove the old project completely
+* Will strip all tasks from old project and add to new
+* Can handle tasks in old project that already have the new project
+"""
+import os
+import sys
+from wmfphablib import phabdb
+from wmfphablib import log
+from wmfphablib import vlog
+from wmfphablib import errorlog as elog
+
+
+def main(oldproject, newproject):
+ oldprojectPHID = phabdb.get_project_phid(oldproject)
+ old_tasks = phabdb.get_project_tasks(oldprojectPHID)
+ newprojectPHID = phabdb.get_project_phid(newproject)
+ for t in old_tasks:
+ print phabdb.set_related_project(t, newprojectPHID)
+ phabdb.remove_project_tasks(oldprojectPHID)
+
+main(sys.argv[1], sys.argv[2])
diff --git a/wmfphablib/phabdb.py b/wmfphablib/phabdb.py
index 5124ba0..9b96a3d 100755
--- a/wmfphablib/phabdb.py
+++ b/wmfphablib/phabdb.py
@@ -518,6 +518,13 @@ def set_related_project(taskPHID, projphid):
p.close()
return get_task_projects(taskPHID)
+def remove_project_tasks(projectPHID):
+ p = phdb(db='phabricator_maniphest',
+ user=phuser_user,
+ passwd=phuser_passwd)
+ p.sql_x("DELETE from edge where dst=%s", (projectPHID))
+ p.close()
+
def phid_hash():
"""get a random hash for PHID building"""
return os.urandom(20).encode('hex')[:20]
@@ -1217,6 +1224,21 @@ def set_project_policy(projphid, view, edit):
projphid))
p.close()
+def get_project_tasks(projectPHID):
+ """ get project phid by name
+ :param projectPHID: str
+ """
+ p = phdb(db='phabricator_maniphest',
+ user=phuser_user,
+ passwd=phuser_passwd)
+ _ = p.sql_x("SELECT src from edge \
+ WHERE dst=%s", (projectPHID), limit=None)
+ p.close()
+ if _ is None:
+ return []
+ p_ = list(util.tflatten(_))
+ return p_
+
def get_project_phid(project):
""" get project phid by name
:param project: str