~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commit.py

  • Committer: Robert Collins
  • Date: 2005-08-23 06:52:09 UTC
  • mto: (974.1.50) (1185.1.10) (1092.3.1)
  • mto: This revision was merged to the branch mainline in revision 1139.
  • Revision ID: robertc@robertcollins.net-20050823065209-81cd5962c401751b
move io redirection into each test case from the global runner

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
           committer=None,
25
25
           verbose=True,
26
26
           specific_files=None,
27
 
           rev_id=None):
 
27
           rev_id=None,
 
28
           allow_pointless=True):
28
29
    """Commit working copy as a new revision.
29
30
 
30
31
    The basic approach is to add all the file texts into the
41
42
    be robust against files disappearing, moving, etc.  So the
42
43
    whole thing is a bit hard.
43
44
 
 
45
    This raises PointlessCommit if there are no changes, no new merges,
 
46
    and allow_pointless  is false.
 
47
 
44
48
    timestamp -- if not None, seconds-since-epoch for a
45
49
         postdated/predated commit.
46
50
 
59
63
 
60
64
    from bzrlib.osutils import local_time_offset, username
61
65
    from bzrlib.branch import gen_file_id
62
 
    from bzrlib.errors import BzrError
 
66
    from bzrlib.errors import BzrError, PointlessCommit
63
67
    from bzrlib.revision import Revision, RevisionReference
64
68
    from bzrlib.trace import mutter, note
65
69
    from bzrlib.xml import pack_xml
85
89
 
86
90
        pending_merges = branch.pending_merges()
87
91
 
88
 
        missing_ids, new_inv = _gather_commit(branch,
89
 
                                              work_tree,
90
 
                                              work_inv,
91
 
                                              basis_inv,
92
 
                                              specific_files,
93
 
                                              verbose)
 
92
        missing_ids, new_inv, any_changes = \
 
93
                     _gather_commit(branch,
 
94
                                    work_tree,
 
95
                                    work_inv,
 
96
                                    basis_inv,
 
97
                                    specific_files,
 
98
                                    verbose)
 
99
 
 
100
        if not (any_changes or allow_pointless or pending_merges):
 
101
            raise PointlessCommit()
94
102
 
95
103
        for file_id in missing_ids:
96
104
            # Any files that have been deleted are now removed from the
107
115
            if work_inv.has_id(file_id):
108
116
                del work_inv[file_id]
109
117
 
110
 
 
111
118
        if rev_id is None:
112
 
            rev_id = _gen_revision_id(time.time())
 
119
            rev_id = _gen_revision_id(branch, time.time())
113
120
        inv_id = rev_id
114
121
 
115
122
        inv_tmp = tempfile.TemporaryFile()
129
136
            timestamp = time.time()
130
137
 
131
138
        if committer == None:
132
 
            committer = username()
 
139
            committer = username(branch)
133
140
 
134
141
        if timezone == None:
135
142
            timezone = local_time_offset()
178
185
 
179
186
 
180
187
 
181
 
def _gen_revision_id(when):
 
188
def _gen_revision_id(branch, when):
182
189
    """Return new revision-id."""
183
190
    from binascii import hexlify
184
 
    from osutils import rand_bytes, compact_date, user_email
 
191
    from bzrlib.osutils import rand_bytes, compact_date, user_email
185
192
 
186
 
    s = '%s-%s-' % (user_email(), compact_date(when))
 
193
    s = '%s-%s-' % (user_email(branch), compact_date(when))
187
194
    s += hexlify(rand_bytes(8))
188
195
    return s
189
196
 
192
199
                   verbose):
193
200
    """Build inventory preparatory to commit.
194
201
 
 
202
    Returns missing_ids, new_inv, any_changes.
 
203
 
195
204
    This adds any changed files into the text store, and sets their
196
205
    test-id, sha and size in the returned inventory appropriately.
197
206
 
201
210
        working inventory.
202
211
    """
203
212
    from bzrlib.inventory import Inventory
204
 
    from osutils import isdir, isfile, sha_string, quotefn, \
 
213
    from bzrlib.osutils import isdir, isfile, sha_string, quotefn, \
205
214
         local_time_offset, username, kind_marker, is_inside_any
206
215
    
207
 
    from branch import gen_file_id
208
 
    from errors import BzrError
209
 
    from revision import Revision
 
216
    from bzrlib.branch import gen_file_id
 
217
    from bzrlib.errors import BzrError
 
218
    from bzrlib.revision import Revision
210
219
    from bzrlib.trace import mutter, note
211
220
 
212
 
    inv = Inventory()
 
221
    any_changes = False
 
222
    inv = Inventory(work_inv.root.file_id)
213
223
    missing_ids = []
214
224
    
215
225
    for path, entry in work_inv.iter_entries():
221
231
        mutter('commit prep file %s, id %r ' % (p, file_id))
222
232
 
223
233
        if specific_files and not is_inside_any(specific_files, path):
 
234
            mutter('  skipping file excluded from commit')
224
235
            if basis_inv.has_id(file_id):
225
236
                # carry over with previous state
226
237
                inv.add(basis_inv[file_id].copy())
232
243
        if not work_tree.has_id(file_id):
233
244
            if verbose:
234
245
                print('deleted %s%s' % (path, kind_marker(entry.kind)))
 
246
                any_changes = True
235
247
            mutter("    file is missing, removing from inventory")
236
248
            missing_ids.append(file_id)
237
249
            continue
283
295
            marked = path + kind_marker(entry.kind)
284
296
            if not old_ie:
285
297
                print 'added', marked
 
298
                any_changes = True
286
299
            elif old_ie == entry:
287
300
                pass                    # unchanged
288
301
            elif (old_ie.name == entry.name
289
302
                  and old_ie.parent_id == entry.parent_id):
290
303
                print 'modified', marked
 
304
                any_changes = True
291
305
            else:
292
306
                print 'renamed', marked
 
307
                any_changes = True
293
308
                        
294
 
    return missing_ids, inv
 
309
    return missing_ids, inv, any_changes
295
310
 
296
311