Plugins/VcsPlugins/vcsMercurial/TransplantExtension/transplant.py

Mon, 30 May 2011 16:53:13 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 30 May 2011 16:53:13 +0200
changeset 1078
aeee8401e2ce
child 1087
fb8cd56819a9
permissions
-rw-r--r--

Added support for the Mercurial transplant extension.

1078
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de>
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the transplant extension interface.
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import os
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt4.QtCore import QObject
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from PyQt4.QtGui import QDialog
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from ..HgDialog import HgDialog
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from .TransplantDialog import TransplantDialog
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 class Transplant(QObject):
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 """
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 Class implementing the transplant extension interface.
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 def __init__(self, vcs):
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 Constructor
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 @param vcs reference to the Mercurial vcs object
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 QObject.__init__(self, vcs)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 self.vcs = vcs
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 def shutdown(self):
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 """
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 Public method used to shutdown the transplant interface.
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 """
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 pass
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 def hgTransplant(self, path):
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 Public method to transplant changesets from another branch.
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @param path directory name of the project (string)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @return flag indicating that the project should be reread (boolean)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 """
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 # find the root of the repo
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 repodir = self.vcs.splitPath(path)[0]
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 repodir = os.path.dirname(repodir)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 if repodir == os.sep:
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 return False
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 res = False
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 dlg = TransplantDialog(self.vcs.hgGetBranchesList(repodir))
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 if dlg.exec_() == QDialog.Accepted:
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 revs, sourceRepo, branch, all, pruneRevs, mergeRevs, log = dlg.getData()
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 args = []
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 args.append("transplant")
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 if sourceRepo:
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 args.append("--source")
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 args.append(sourceRepo)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 if branch:
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 args.append("--branch")
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 args.append(branch)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 if all:
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 args.append("--all")
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 for pruneRev in pruneRevs:
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 args.append("--prune")
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 args.append(pruneRev)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 for mergeRev in mergeRevs:
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 args.append("--merge")
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 args.append(mergeRev)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 if log:
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 args.append("--log")
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 args.extend(revs)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 dia = HgDialog(self.trUtf8('Transplant Changesets'))
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 res = dia.startProcess(args, repodir)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 if res:
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 dia.exec_()
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 res = dia.hasAddOrDelete()
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 self.vcs.checkVCSStatus()
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 return res
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 def hgTransplantContinue(self, path):
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 """
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 Public method to transplant changesets from another branch.
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 @param path directory name of the project (string)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 @return flag indicating that the project should be reread (boolean)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 """
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 # find the root of the repo
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 repodir = self.vcs.splitPath(path)[0]
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 repodir = os.path.dirname(repodir)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 if repodir == os.sep:
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 return
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 args = []
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 args.append("transplant")
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 args.append("--continue")
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 dia = HgDialog(self.trUtf8('Transplant Changesets (Continue'))
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 res = dia.startProcess(args, repodir)
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 if res:
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 dia.exec_()
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 res = dia.hasAddOrDelete()
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 self.vcs.checkVCSStatus()
aeee8401e2ce Added support for the Mercurial transplant extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 return res

eric ide

mercurial