27
27
import bzrlib.errors
28
from bzrlib.errors import (BzrCommandError, NotBranchError, NoSuchFile,
29
UnsupportedFormatError, TransportError,
30
NoWorkingTree, PermissionDenied)
31
from bzrlib.bzrdir import BzrDir, BzrDirFormat
28
from bzrlib.errors import BzrCommandError
29
from bzrlib.bzrdir import BzrDir
34
32
dirname = tempfile.mkdtemp("temp-branch")
55
>>> tree.commit("added file", rev_id='commit-id')
53
>>> tree.commit("added file")
58
from bzrlib.diff import compare_trees
61
59
old_tree = cur_tree.basis_tree()
62
60
new_tree = cur_tree
64
62
for path, file_class, kind, file_id, entry in new_tree.list_files():
65
63
if file_class in ('?', 'I'):
66
64
non_source.append(path)
67
delta = new_tree.changes_from(old_tree, want_unchanged=False)
65
delta = compare_trees(old_tree, new_tree, want_unchanged=False)
68
66
return not delta.has_changed(), non_source
70
68
def set_push_data(tree, location):
71
tree.branch.control_files.put_utf8("x-push-data", "%s\n" % location)
69
push_file = file (tree.branch.control_files.controlfilename("x-push-data"), "wb")
70
push_file.write("%s\n" % location)
73
72
def get_push_data(tree):
78
77
>>> set_push_data(tree, 'http://somewhere')
79
78
>>> get_push_data(tree)
84
location = tree.branch.control_files.get_utf8('x-push-data').read()
82
filename = tree.branch.control_files.controlfilename("x-push-data")
83
if not os.path.exists(filename):
87
return location.rstrip('\n')
85
push_file = file (filename, "rb")
86
(location,) = [f.rstrip('\n') for f in push_file]
90
90
>>> shell_escape('hello')
239
239
except RsyncNoFile:
242
def rspush(tree, location=None, overwrite=False, working_tree=True):
242
def push(tree, location=None, overwrite=False, working_tree=True):
243
243
push_location = get_push_data(tree)
244
244
if location is not None:
245
245
if not location.endswith('/'):
247
247
push_location = location
249
249
if push_location is None:
250
raise BzrCommandError("No rspush location known or specified.")
252
if (push_location.find('://') != -1 or
253
push_location.find(':') == -1):
254
raise BzrCommandError("Invalid rsync path %r." % push_location)
250
if tree.branch.get_push_location() is None:
251
raise BzrCommandError("No push location known or specified.")
253
raise bzrlib.errors.MustUseDecorated
255
if push_location.find('://') != -1:
256
raise bzrlib.errors.MustUseDecorated
258
if push_location.find(':') == -1:
259
raise bzrlib.errors.MustUseDecorated
257
262
clean, non_source = is_clean(tree)
296
301
return new_committer
300
"""Screen-scrape Apache listings"""
301
apache_dir = '<img border="0" src="/icons/folder.gif" alt="[dir]">'\
304
expr = re.compile('<a[^>]*href="([^>]*)"[^>]*>', flags=re.I)
306
match = expr.search(line)
310
if url.startswith('http://') or url.startswith('/') or '../' in url:
314
yield url.rstrip('/')
317
def iter_branches(t, lister=None):
318
"""Iterate through all the branches under a transport"""
319
for bzrdir in iter_bzrdirs(t, lister):
321
branch = bzrdir.open_branch()
322
if branch.bzrdir is bzrdir:
324
except (NotBranchError, UnsupportedFormatError):
328
def iter_branch_tree(t, lister=None):
329
for bzrdir in iter_bzrdirs(t, lister):
331
wt = bzrdir.open_workingtree()
333
except NoWorkingTree, UnsupportedFormatError:
335
branch = bzrdir.open_branch()
336
if branch.bzrdir is bzrdir:
338
except (NotBranchError, UnsupportedFormatError):
342
def iter_bzrdirs(t, lister=None):
345
return t.list_dir('.')
347
bzrdir = bzrdir_from_transport(t)
349
except (NotBranchError, UnsupportedFormatError, TransportError,
353
for directory in lister(t):
354
if directory == ".bzr":
357
subt = t.clone(directory)
358
except UnicodeDecodeError:
360
for bzrdir in iter_bzrdirs(subt, lister):
362
except (NoSuchFile, PermissionDenied, TransportError):
366
def bzrdir_from_transport(t):
367
"""Open a bzrdir from a transport (not a location)"""
368
format = BzrDirFormat.find_format(t)
369
BzrDir._check_supported(format, False)
370
return format.open(t)
375
306
result = doctest.testmod()