diff options
author | cpettet <rush@wikimedia.org> | 2015-01-30 13:18:05 -0600 |
---|---|---|
committer | cpettet <rush@wikimedia.org> | 2015-01-30 13:18:31 -0600 |
commit | d0f4893d45b1504cf28b6c131180d16b4c4850f9 (patch) | |
tree | 5187243826fdc7df252436c33812ebb504e2d16b | |
parent | db3acec9dd6c2c0150ffb52a8b587bb5befd34a8 (diff) |
tooling in support of T87291
regarding operations project cleanup
Change-Id: I9273e8a31c2bfa5569739848cfdc83d86625c8cb
-rw-r--r-- | project_merge.py | 30 | ||||
-rwxr-xr-x | wmfphablib/phabdb.py | 22 |
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 |