1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 """Construction of tla commands
20 """
21
22 import os.path
23 from pybaz.pathname import DirName, FileName
24 from pybaz import errors
25 from pybaz._escaping import *
26 from pybaz._nameparser import NameParser
27
28 tlasyn = None
29 tlaobj = None
30
31
44
45
57
58
70
71
76
77
78
79
81 msg_format = ("'expected' param must be a sequence of positive"
82 " integers but was: %r")
83 try:
84 iterator = iter(expected)
85 except TypeError:
86 raise TypeError, msg_format % expected
87 for status in iterator:
88 if not isinstance(status, int):
89 raise TypeError, msg_format % expected
90 if status < 0:
91 raise ValueError, msg_format % expected
92
93
94
95
99
101 """Deprecated, for internal use only."""
102 _backend().null_cmd(args, chdir)
103
105 """Deprecated, for internal use only."""
106 return _backend().one_cmd(args, chdir)
107
109 """Deprecated, for internal use only."""
110 return _backend().sequence_cmd(args, expected, chdir)
111
112 -def text_cmd(args, chdir=None):
113 """Deprecated, for internal use only."""
114 return _backend().text_cmd(args, chdir)
115
117 """Deprecated, for internal use only."""
118 return _backend().status_cmd(args, expected)
119
121 """Deprecated, for internal use only."""
122 return _backend().status_one_cmd(args, expected, chdir)
123
124 -def status_text_cmd(args, expected):
125 """Deprecated, for internal use only."""
126 return _backend().status_text_cmd(args, expected)
127
128
129
130
131
132
137
138
141
142
143
144
145 -def init_tree(dir, version=None, nested=False):
146 args = ['init-tree', '--dir', dir]
147 if nested: args.append('--nested')
148 if version is not None: args.append(version)
149 null_cmd(args)
150
155
158
160 args = ['resolved', '--dir', dir]
161 if all:
162 args.append('--all')
163 null_cmd(args)
164
165 -def undo(dir, revision=None, output=None, quiet=False, throw_away=False):
166 args = ['undo', '--dir', dir]
167 if quiet: args.append('--quiet')
168 if throw_away:
169 args.append('--no-output')
170 elif output:
171 args.extend(('--output', output))
172 if revision: args.append(revision)
173 null_cmd(args)
174
176 args = ['log-for-merge', '--dir', dir]
177 return text_cmd(args)
178
179
180 -def redo(dir, patch=None, keep=False, quiet=False):
181 args = ['redo', '--dir', dir]
182 if quiet: args.append('--quiet')
183 if keep: args.append('--keep')
184 if patch: args.extend(('--patch', patch))
185 null_cmd(args)
186
188 """FIXME: add the other parameters."""
189
190
191
192
193 null_cmd(['update'], chdir=dir)
194
196 """FIXME: add the other parameters."""
197 args = ['replay', '--dir', dir]
198 null_cmd(args)
199
200
201
202
205
208
211
214
215 -def move(src, dest):
217
218
219
220
222 return null_cmd(('changeset', orig, mod, dest) + files)
223
224
225
226
233
234
235
241
242
245
246
249
250
251 -def iter_merges(version1, version2=None, reverse=False, metoo=True):
252 subcmd = cmd().merges
253 if subcmd is None:
254 raise NotImplementedError, \
255 "merges is not implemented in tla 1.0"""
256 args = [ subcmd ]
257 if reverse: args.append('--reverse')
258 args.append('--full')
259 args.append(version1)
260 if version2 is not None: args.append(version2)
261 for line in sequence_cmd(args):
262 target, source = line.split('\t')
263 if metoo or '%s--%s' % (version1, target) != source:
264 yield target, source
265
266
267
268
270 return text_cmd(('make-log', '--dir', dir))[:-1]
271
274
277
278
279 -def iter_log_versions(dir, reverse=False,
280 archive=None, category=None, branch=None, version=None):
288
289
291 opts = [ cmd().log_ls, '--full', '--dir', dir ]
292 if reverse: opts.append('--reverse')
293 opts.append(version)
294 return sequence_cmd(opts)
295
296
297
298
299
300
301 -def tag(source_revision, tag_version):
302 null_cmd(('branch', source_revision, tag_version))
303
304
305
306
308 args = ('file-find', '--new-file', file_name, revision)
309
310 output = text_cmd(args, chdir=tree)
311 path = output.splitlines()[-1]
312 if path == '/dev/null': return None
313 if cmd().name_escaping:
314 return name_unescape(path)
315 else:
316 return path
317
319 args = ('pristines', '--dir', dir_name)
320 return sequence_cmd(args)
321
325
327 args = ('find-pristine', '--dir', dir_name, revision)
328 return one_cmd(args)
329
330
331
332
334 args = ('my-revision-library', '--silent')
335 return sequence_cmd(args, expected=(0,1))
336
339
342
345
348
351
357
363
364
367
370
373
374
375
376
379
381 return text_cmd(('escape', '--unescaped', text))
382
383
384
385
387 """Return True if dir is, or is inside, a Arch source tree."""
388
389
390 status = status_cmd(('tree-root', dir), expected=(0,1))
391 return not status
392
393
395 assert os.path.exists(path)
396 arch_ids = DirName('.arch-ids')
397 if os.path.isfile(path):
398 dir_, base = FileName(path).splitname()
399 return os.path.exists(dir_/arch_ids/(base+'.id'))
400 if os.path.isdir(path):
401 return os.path.exists(DirName(path)/arch_ids/'=id')
402 raise AssertionError, 'not regular file or directory: ' + path
403