~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to bzrtools.py

  • Committer: Aaron Bentley
  • Date: 2007-06-10 17:55:08 UTC
  • mfrom: (531.2.2 bzrtools)
  • Revision ID: aaron.bentley@utoronto.ca-20070610175508-gex1oxvmfv0qoagi
Merge whitespace cleanups

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 Aaron Bentley
2
 
# <aaron.bentley@utoronto.ca>
 
1
# Copyright (C) 2005, 2006, 2007 Aaron Bentley <aaron.bentley@utoronto.ca>
 
2
# Copyright (C) 2007 John Arbash Meinel
3
3
#
4
4
#    This program is free software; you can redistribute it and/or modify
5
5
#    it under the terms of the GNU General Public License as published by
26
26
import bzrlib
27
27
import bzrlib.errors
28
28
from bzrlib.errors import (BzrCommandError, NotBranchError, NoSuchFile,
29
 
                           UnsupportedFormatError, TransportError, 
 
29
                           UnsupportedFormatError, TransportError,
30
30
                           NoWorkingTree, PermissionDenied)
31
31
from bzrlib.bzrdir import BzrDir, BzrDirFormat
32
32
 
40
40
def is_clean(cur_tree):
41
41
    """
42
42
    Return true if no files are modifed or unknown
43
 
    >>> import bzrlib.add
44
 
    >>> tree = temp_tree()
45
 
    >>> is_clean(tree)
46
 
    (True, [])
47
 
    >>> fooname = os.path.join(tree.basedir, "foo")
48
 
    >>> file(fooname, "wb").write("bar")
49
 
    >>> is_clean(tree)
50
 
    (True, [u'foo'])
51
 
    >>> bzrlib.add.smart_add_tree(tree, [tree.basedir])
52
 
    ([u'foo'], {})
53
 
    >>> is_clean(tree)
54
 
    (False, [])
55
 
    >>> tree.commit("added file", rev_id='commit-id')
56
 
    'commit-id'
57
 
    >>> is_clean(tree)
58
 
    (True, [])
59
 
    >>> rm_tree(tree)
60
43
    """
61
 
    from bzrlib.diff import compare_trees
62
44
    old_tree = cur_tree.basis_tree()
63
45
    new_tree = cur_tree
64
46
    non_source = []
65
 
    for path, file_class, kind, file_id, entry in new_tree.list_files():
66
 
        if file_class in ('?', 'I'):
67
 
            non_source.append(path)
68
 
    delta = compare_trees(old_tree, new_tree, want_unchanged=False)
 
47
    new_tree.lock_read()
 
48
    try:
 
49
        for path, file_class, kind, file_id, entry in new_tree.list_files():
 
50
            if file_class in ('?', 'I'):
 
51
                non_source.append(path)
 
52
        delta = new_tree.changes_from(old_tree, want_unchanged=False)
 
53
    finally:
 
54
        new_tree.unlock()
69
55
    return not delta.has_changed(), non_source
70
56
 
71
57
def set_push_data(tree, location):
113
99
    def __init__(self, rsync_name):
114
100
        Exception.__init__(self, "%s not found." % rsync_name)
115
101
 
116
 
def rsync(source, target, ssh=False, excludes=(), silent=False, 
 
102
def rsync(source, target, ssh=False, excludes=(), silent=False,
117
103
          rsync_name="rsync"):
118
104
    """
119
105
    >>> new_dir = tempfile.mkdtemp()
148
134
    except OSError, e:
149
135
        if e.errno == errno.ENOENT:
150
136
            raise NoRsync(rsync_name)
151
 
            
 
137
 
152
138
    proc.stdin.write('\n'.join(excludes)+'\n')
153
139
    proc.stdin.close()
154
140
    if silent:
190
176
        raise RsyncUnknownStatus(proc.returncode)
191
177
    return [l.split(' ')[-1].rstrip('\n') for l in result.splitlines(True)]
192
178
 
193
 
exclusions = ('.bzr/x-push-data', '.bzr/branch/x-push/data', '.bzr/parent', 
 
179
exclusions = ('.bzr/x-push-data', '.bzr/branch/x-push/data', '.bzr/parent',
194
180
              '.bzr/branch/parent', '.bzr/x-pull-data', '.bzr/x-pull',
195
181
              '.bzr/pull', '.bzr/stat-cache', '.bzr/x-rsync-data',
196
182
              '.bzr/basis-inventory', '.bzr/inventory.backup.weave')
230
216
        return False
231
217
    for local, remote in zip(remote_history, local_history):
232
218
        if local != remote:
233
 
            return False 
 
219
            return False
234
220
    return True
235
221
 
236
222
def empty_or_absent(location):
246
232
        if not location.endswith('/'):
247
233
            location += '/'
248
234
        push_location = location
249
 
    
 
235
 
250
236
    if push_location is None:
251
237
        raise BzrCommandError("No rspush location known or specified.")
252
238
 
 
239
    if (push_location.find('::') != -1):
 
240
        usessh=False
 
241
    else:
 
242
        usessh=True
 
243
 
253
244
    if (push_location.find('://') != -1 or
254
245
        push_location.find(':') == -1):
255
246
        raise BzrCommandError("Invalid rsync path %r." % push_location)
284
275
                " specified location.  Please ensure that"
285
276
                ' "%s" is of the form "machine:/path".' % push_location)
286
277
    print "Pushing to %s" % push_location
287
 
    rsync(tree.basedir+'/', push_location, ssh=True, 
 
278
    rsync(tree.basedir+'/', push_location, ssh=usessh,
288
279
          excludes=final_exclusions)
289
280
 
290
281
    set_push_data(tree, push_location)
363
354
    except (NoSuchFile, PermissionDenied, TransportError):
364
355
        pass
365
356
 
366
 
    
 
357
 
367
358
def bzrdir_from_transport(t):
368
359
    """Open a bzrdir from a transport (not a location)"""
369
360
    format = BzrDirFormat.find_format(t)