Gentoo Archives: gentoo-commits

From: Brian Dolbec <dolsen@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/repoman/
Date: Mon, 21 Sep 2015 23:51:36
Message-Id: 1442878966.befc99fa5ff79af530be6e3126a300e182866a2f.dolsen@gentoo
1 commit: befc99fa5ff79af530be6e3126a300e182866a2f
2 Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
3 AuthorDate: Sat Sep 19 02:07:27 2015 +0000
4 Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
5 CommitDate: Mon Sep 21 23:42:46 2015 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=befc99fa
7
8 repoman/actions.py: Break out changes detectection into sudo vcs plugins
9
10 pym/repoman/actions.py | 215 +++++++++++++++++++++++++++----------------------
11 1 file changed, 120 insertions(+), 95 deletions(-)
12
13 diff --git a/pym/repoman/actions.py b/pym/repoman/actions.py
14 index 611c0dd..1f70815 100644
15 --- a/pym/repoman/actions.py
16 +++ b/pym/repoman/actions.py
17 @@ -74,102 +74,9 @@ class Actions(object):
18
19 self._vcs_deleted(mydeleted)
20
21 - if self.vcs_settings.vcs == "cvs":
22 - mycvstree = cvstree.getentries("./", recursive=1)
23 - mychanged = cvstree.findchanged(mycvstree, recursive=1, basedir="./")
24 - mynew = cvstree.findnew(mycvstree, recursive=1, basedir="./")
25 - myremoved = portage.cvstree.findremoved(mycvstree, recursive=1, basedir="./")
26 - bin_blob_pattern = re.compile("^-kb$")
27 - no_expansion = set(portage.cvstree.findoption(
28 - mycvstree, bin_blob_pattern, recursive=1, basedir="./"))
29 -
30 - if self.vcs_settings.vcs == "svn":
31 - with repoman_popen("svn status") as f:
32 - svnstatus = f.readlines()
33 - mychanged = [
34 - "./" + elem.split()[-1:][0]
35 - for elem in svnstatus
36 - if (elem[:1] in "MR" or elem[1:2] in "M")]
37 - mynew = [
38 - "./" + elem.split()[-1:][0]
39 - for elem in svnstatus
40 - if elem.startswith("A")]
41 - myremoved = [
42 - "./" + elem.split()[-1:][0]
43 - for elem in svnstatus
44 - if elem.startswith("D")]
45 -
46 - # Subversion expands keywords specified in svn:keywords properties.
47 - with repoman_popen("svn propget -R svn:keywords") as f:
48 - props = f.readlines()
49 - expansion = dict(
50 - ("./" + prop.split(" - ")[0], prop.split(" - ")[1].split())
51 - for prop in props if " - " in prop)
52 -
53 - elif self.vcs_settings.vcs == "git":
54 - with repoman_popen(
55 - "git diff-index --name-only "
56 - "--relative --diff-filter=M HEAD") as f:
57 - mychanged = f.readlines()
58 - mychanged = ["./" + elem[:-1] for elem in mychanged]
59 -
60 - with repoman_popen(
61 - "git diff-index --name-only "
62 - "--relative --diff-filter=A HEAD") as f:
63 - mynew = f.readlines()
64 - mynew = ["./" + elem[:-1] for elem in mynew]
65 -
66 - with repoman_popen(
67 - "git diff-index --name-only "
68 - "--relative --diff-filter=D HEAD") as f:
69 - myremoved = f.readlines()
70 - myremoved = ["./" + elem[:-1] for elem in myremoved]
71 -
72 - if self.vcs_settings.vcs == "bzr":
73 - with repoman_popen("bzr status -S .") as f:
74 - bzrstatus = f.readlines()
75 - mychanged = [
76 - "./" + elem.split()[-1:][0].split('/')[-1:][0]
77 - for elem in bzrstatus
78 - if elem and elem[1:2] == "M"]
79 - mynew = [
80 - "./" + elem.split()[-1:][0].split('/')[-1:][0]
81 - for elem in bzrstatus
82 - if elem and (elem[1:2] in "NK" or elem[0:1] == "R")]
83 - myremoved = [
84 - "./" + elem.split()[-1:][0].split('/')[-1:][0]
85 - for elem in bzrstatus
86 - if elem.startswith("-")]
87 - myremoved = [
88 - "./" + elem.split()[-3:-2][0].split('/')[-1:][0]
89 - for elem in bzrstatus
90 - if elem and (elem[1:2] == "K" or elem[0:1] == "R")]
91 - # Bazaar expands nothing.
92 -
93 - if self.vcs_settings.vcs == "hg":
94 - with repoman_popen("hg status --no-status --modified .") as f:
95 - mychanged = f.readlines()
96 - mychanged = ["./" + elem.rstrip() for elem in mychanged]
97 -
98 - with repoman_popen("hg status --no-status --added .") as f:
99 - mynew = f.readlines()
100 - mynew = ["./" + elem.rstrip() for elem in mynew]
101 -
102 - with repoman_popen("hg status --no-status --removed .") as f:
103 - myremoved = f.readlines()
104 - myremoved = ["./" + elem.rstrip() for elem in myremoved]
105 + changes = self.get_vcs_changed(mydeleted)
106
107 - if self.vcs_settings.vcs:
108 - a_file_is_changed = mychanged or mynew or myremoved
109 - a_file_is_deleted_hg = self.vcs_settings.vcs == "hg" and mydeleted
110 -
111 - if not (a_file_is_changed or a_file_is_deleted_hg):
112 - utilities.repoman_sez(
113 - "\"Doing nothing is not always good for QA.\"")
114 - print()
115 - print("(Didn't find any changed files...)")
116 - print()
117 - sys.exit(1)
118 + mynew, mychanged, myremoved, no_expansion, expansion = changes
119
120 # Manifests need to be regenerated after all other commits, so don't commit
121 # them now even if they have changed.
122 @@ -772,3 +679,121 @@ class Actions(object):
123 print()
124 print()
125 sys.exit(1)
126 +
127 +
128 + def get_vcs_changed(self, mydeleted):
129 + '''Holding function which calls the approriate VCS module for the data'''
130 + changed = ([], [], [], [], [])
131 + if self.vcs_settings.vcs:
132 + vcs_module = getattr(self, '_get_changed_%s_' % self.vcs_settings.vcs)
133 + changed = vcs_module(mydeleted)
134 + mynew, mychanged, myremoved, no_expansion, expansion = changed
135 +
136 + a_file_is_changed = mychanged or mynew or myremoved
137 + a_file_is_deleted_hg = self.vcs_settings.vcs == "hg" and mydeleted
138 +
139 + if not (a_file_is_changed or a_file_is_deleted_hg):
140 + utilities.repoman_sez(
141 + "\"Doing nothing is not always good for QA.\"")
142 + print()
143 + print("(Didn't find any changed files...)")
144 + print()
145 + sys.exit(1)
146 + return changed
147 +
148 +
149 + def _get_changed_cvs_(self, mydeleted):
150 + mycvstree = cvstree.getentries("./", recursive=1)
151 + mychanged = cvstree.findchanged(mycvstree, recursive=1, basedir="./")
152 + mynew = cvstree.findnew(mycvstree, recursive=1, basedir="./")
153 + myremoved = portage.cvstree.findremoved(mycvstree, recursive=1, basedir="./")
154 + bin_blob_pattern = re.compile("^-kb$")
155 + no_expansion = set(portage.cvstree.findoption(
156 + mycvstree, bin_blob_pattern, recursive=1, basedir="./"))
157 + expansion = {}
158 + return (mynew, mychanged, myremoved, no_expansion, expansion)
159 +
160 + def _get_changed_svn_(self, mydeleted):
161 + with repoman_popen("svn status") as f:
162 + svnstatus = f.readlines()
163 + mychanged = [
164 + "./" + elem.split()[-1:][0]
165 + for elem in svnstatus
166 + if (elem[:1] in "MR" or elem[1:2] in "M")]
167 + mynew = [
168 + "./" + elem.split()[-1:][0]
169 + for elem in svnstatus
170 + if elem.startswith("A")]
171 + myremoved = [
172 + "./" + elem.split()[-1:][0]
173 + for elem in svnstatus
174 + if elem.startswith("D")]
175 + # Subversion expands keywords specified in svn:keywords properties.
176 + with repoman_popen("svn propget -R svn:keywords") as f:
177 + props = f.readlines()
178 + expansion = dict(
179 + ("./" + prop.split(" - ")[0], prop.split(" - ")[1].split())
180 + for prop in props if " - " in prop)
181 + no_expansion = set()
182 + return (mynew, mychanged, myremoved, no_expansion, expansion)
183 +
184 + def _get_changed_git_(self, mydeleted):
185 + with repoman_popen(
186 + "git diff-index --name-only "
187 + "--relative --diff-filter=M HEAD") as f:
188 + mychanged = f.readlines()
189 + mychanged = ["./" + elem[:-1] for elem in mychanged]
190 + with repoman_popen(
191 + "git diff-index --name-only "
192 + "--relative --diff-filter=A HEAD") as f:
193 + mynew = f.readlines()
194 + mynew = ["./" + elem[:-1] for elem in mynew]
195 + with repoman_popen(
196 + "git diff-index --name-only "
197 + "--relative --diff-filter=D HEAD") as f:
198 + myremoved = f.readlines()
199 + myremoved = ["./" + elem[:-1] for elem in myremoved]
200 + no_expansion = set()
201 + expansion = {}
202 + return (mynew, mychanged, myremoved, no_expansion, expansion)
203 +
204 + def _get_changed_bzr_(self, mydeleted):
205 + with repoman_popen("bzr status -S .") as f:
206 + bzrstatus = f.readlines()
207 + mychanged = [
208 + "./" + elem.split()[-1:][0].split('/')[-1:][0]
209 + for elem in bzrstatus
210 + if elem and elem[1:2] == "M"]
211 + mynew = [
212 + "./" + elem.split()[-1:][0].split('/')[-1:][0]
213 + for elem in bzrstatus
214 + if elem and (elem[1:2] in "NK" or elem[0:1] == "R")]
215 + myremoved = [
216 + "./" + elem.split()[-1:][0].split('/')[-1:][0]
217 + for elem in bzrstatus
218 + if elem.startswith("-")]
219 + myremoved = [
220 + "./" + elem.split()[-3:-2][0].split('/')[-1:][0]
221 + for elem in bzrstatus
222 + if elem and (elem[1:2] == "K" or elem[0:1] == "R")]
223 + # Bazaar expands nothing.
224 + no_expansion = set()
225 + expansion = {}
226 + return (mynew, mychanged, myremoved, no_expansion, expansion)
227 +
228 + def _get_changed_hg_(self, mydeleted):
229 + with repoman_popen("hg status --no-status --modified .") as f:
230 + mychanged = f.readlines()
231 + mychanged = ["./" + elem.rstrip() for elem in mychanged]
232 +
233 + with repoman_popen("hg status --no-status --added .") as f:
234 + mynew = f.readlines()
235 + mynew = ["./" + elem.rstrip() for elem in mynew]
236 +
237 + with repoman_popen("hg status --no-status --removed .") as f:
238 + myremoved = f.readlines()
239 + myremoved = ["./" + elem.rstrip() for elem in myremoved]
240 + no_expansion = set()
241 + expansion = {}
242 + return (mynew, mychanged, myremoved, no_expansion, expansion)
243 +