~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to bzrtools.py

  • Committer: aaron.bentley at utoronto
  • Date: 2005-08-26 01:54:58 UTC
  • Revision ID: aaron.bentley@utoronto.ca-20050826015458-6938736e388c24f4
Excluded non-source files

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
import sys
21
21
import tempfile
22
22
import shutil
 
23
from subprocess import Popen, PIPE
23
24
 
24
25
def temp_branch():
25
26
    dirname = tempfile.mkdtemp("temp-branch")
49
50
    from bzrlib.diff import compare_trees
50
51
    old_tree = cur_branch.basis_tree()
51
52
    new_tree = cur_branch.working_tree()
 
53
    non_source = []
52
54
    for path, file_class, kind, file_id in new_tree.list_files():
53
 
        if file_class == '?':
54
 
            return False
 
55
        if file_class in ('?', 'I'):
 
56
            non_source.append(path)
55
57
    delta = compare_trees(old_tree, new_tree, want_unchanged=False)
56
58
    if len(delta.added) > 0 or len(delta.removed) > 0 or \
57
59
        len(delta.modified) > 0:
58
 
        return False
59
 
    return True
 
60
        return False, non_source
 
61
    return True, non_source 
60
62
 
61
63
def set_pull_data(br, location, rev_id):
62
64
    pull_file = file (br.controlfilename("x-pull-data"), "wb")
118
120
    arg_str = " ".join([shell_escape(a) for a in args])
119
121
    return os.system(arg_str)
120
122
 
121
 
def rsync(source, target, ssh=False, exclude_globs=()):
 
123
def rsync(source, target, ssh=False, excludes=()):
122
124
    """
123
125
    >>> real_system = os.system
124
126
    >>> os.system = sys.stdout.write
125
127
    >>> rsync("a", "b")
126
128
    \\r\\s\\y\\n\\c \\-\\a\\v \\-\\-\\d\\e\\l\\e\\t\\e \\a \\b
127
 
    >>> rsync("a", "b", exclude_globs=("*.py",))
 
129
    >>> rsync("a", "b", excludes=("*.py",))
128
130
    \\r\\s\\y\\n\\c \\-\\a\\v \\-\\-\\d\\e\\l\\e\\t\\e\
129
131
 \\-\\-\\e\\x\\c\\l\\u\\d\\e \\*\\.\\p\\y \\a \\b
130
132
    >>> os.system = real_system
132
134
    cmd = ["rsync", "-av", "--delete"]
133
135
    if ssh:
134
136
        cmd.extend(('-e', 'ssh'))
135
 
    for exclude in exclude_globs:
136
 
        cmd.extend(('--exclude', exclude))
 
137
    if len(excludes) > 0:
 
138
        cmd.extend(('--exclude-from', '-'))
137
139
    cmd.extend((source, target))
138
 
    safe_system(cmd)
139
 
 
140
 
exclusions = ('x-push-data', 'x-pull-data')
141
 
 
142
 
 
143
 
def pull(cur_branch, location=None, overwrite=False):
144
 
    pull_location, pull_revision = get_pull_data(cur_branch)
145
 
    if pull_location is not None:
146
 
        if not overwrite and cur_branch.last_patch() != pull_revision:
147
 
            print "Aborting: This branch has had commits, so pull would lose data."
148
 
            sys.exit(1)
149
 
    if location is not None:
150
 
        pull_location = location
151
 
        if not pull_location.endswith('/'):
152
 
            pull_location+='/'
153
 
 
154
 
    if pull_location is None:
155
 
        print "No pull location saved.  Please specify one on the command line."
156
 
        sys.exit(1)
157
 
 
158
 
    if not is_clean(cur_branch):
159
 
        print "Error: This tree has uncommitted changes or unknown (?) files."
160
 
        sys.exit(1)
161
 
 
162
 
    print "Synchronizing with %s" % pull_location
163
 
    rsync (pull_location, cur_branch.base+'/', exclude_globs=exclusions)
164
 
 
165
 
    set_pull_data(cur_branch, pull_location, cur_branch.last_patch())
 
140
    proc = Popen(cmd, stdin=PIPE)
 
141
    proc.stdin.write('\n'.join(excludes)+'\n')
 
142
    proc.stdin.close()
 
143
    return proc.wait()
 
144
 
 
145
exclusions = ('.bzr/x-push-data', '.bzr/x-pull-data', '.bzr/stat-cache')
166
146
 
167
147
 
168
148
def push(cur_branch, location=None):
176
156
        print "No push location saved.  Please specify one on the command line."
177
157
        sys.exit(1)
178
158
 
179
 
    if not is_clean(cur_branch):
 
159
    clean, non_source = is_clean(cur_branch)
 
160
    if not clean:
180
161
        print """Error: This tree has uncommitted changes or unknown (?) files.
181
162
Use "bzr status" to list them."""
182
163
        sys.exit(1)
 
164
    non_source.extend(exclusions)
183
165
 
184
166
    print "Pushing to %s" % push_location
185
 
    rsync(cur_branch.base+'/', push_location, ssh=True,
186
 
          exclude_globs=exclusions)
 
167
    rsync(cur_branch.base+'/', push_location, ssh=True, excludes=non_source)
187
168
 
188
169
    set_push_data(cur_branch, push_location)
189
170