/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/commit.py

  • Committer: Martin Pool
  • Date: 2005-06-20 03:45:02 UTC
  • Revision ID: mbp@sourcefrog.net-20050620034502-5a07cbdd4976a9e5
- bzr upgrade updates or checks SHA1 on all predecessor revisions

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
 
18
18
 
19
 
# FIXME: "bzr commit doc/format" commits doc/format.txt!
20
 
 
21
19
def commit(branch, message,
22
20
           timestamp=None,
23
21
           timezone=None,
24
22
           committer=None,
25
23
           verbose=True,
26
24
           specific_files=None,
27
 
           rev_id=None,
28
 
           allow_pointless=True):
 
25
           rev_id=None):
29
26
    """Commit working copy as a new revision.
30
27
 
31
28
    The basic approach is to add all the file texts into the
42
39
    be robust against files disappearing, moving, etc.  So the
43
40
    whole thing is a bit hard.
44
41
 
45
 
    This raises PointlessCommit if there are no changes, no new merges,
46
 
    and allow_pointless  is false.
47
 
 
48
42
    timestamp -- if not None, seconds-since-epoch for a
49
43
         postdated/predated commit.
50
44
 
63
57
 
64
58
    from bzrlib.osutils import local_time_offset, username
65
59
    from bzrlib.branch import gen_file_id
66
 
    from bzrlib.errors import BzrError, PointlessCommit
 
60
    from bzrlib.errors import BzrError
67
61
    from bzrlib.revision import Revision, RevisionReference
68
62
    from bzrlib.trace import mutter, note
69
 
    from bzrlib.xml import pack_xml
70
63
 
71
64
    branch.lock_write()
72
65
 
87
80
        if verbose:
88
81
            note('looking for changes...')
89
82
 
90
 
        pending_merges = branch.pending_merges()
91
 
 
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()
 
83
        missing_ids, new_inv = _gather_commit(branch,
 
84
                                              work_tree,
 
85
                                              work_inv,
 
86
                                              basis_inv,
 
87
                                              specific_files,
 
88
                                              verbose)
102
89
 
103
90
        for file_id in missing_ids:
104
91
            # Any files that have been deleted are now removed from the
121
108
        inv_id = rev_id
122
109
 
123
110
        inv_tmp = tempfile.TemporaryFile()
124
 
        pack_xml(new_inv, inv_tmp)
 
111
        new_inv.write_xml(inv_tmp)
125
112
        inv_tmp.seek(0)
126
113
        branch.inventory_store.add(inv_tmp, inv_id)
127
114
        mutter('new inventory_id is {%s}' % inv_id)
131
118
        # ever actually does anything special
132
119
        inv_sha1 = branch.get_inventory_sha1(inv_id)
133
120
 
 
121
        precursor_id = branch.last_patch()
 
122
        if precursor_id:
 
123
            precursor_sha1 = branch.get_revision_sha1(precursor_id)
 
124
        else:
 
125
            precursor_sha1 = None
 
126
        parent = RevisionReference(precursor_id, precursor_sha1)
 
127
 
134
128
        branch._write_inventory(work_inv)
135
129
 
136
130
        if timestamp == None:
150
144
                       inventory_id=inv_id,
151
145
                       inventory_sha1=inv_sha1,
152
146
                       revision_id=rev_id)
153
 
 
154
 
        rev.parents = []
155
 
        precursor_id = branch.last_patch()
156
 
        if precursor_id:
157
 
            precursor_sha1 = branch.get_revision_sha1(precursor_id)
158
 
            rev.parents.append(RevisionReference(precursor_id, precursor_sha1))
159
 
        for merge_rev in pending_merges:
160
 
            rev.parents.append(RevisionReference(merge_rev))            
 
147
        rev.parents = [parent]
161
148
 
162
149
        rev_tmp = tempfile.TemporaryFile()
163
 
        pack_xml(rev, rev_tmp)
 
150
        rev.write_xml(rev_tmp)
164
151
        rev_tmp.seek(0)
165
152
        branch.revision_store.add(rev_tmp, rev_id)
166
153
        mutter("new revision_id is {%s}" % rev_id)
177
164
 
178
165
        branch.append_revision(rev_id)
179
166
 
180
 
        branch.set_pending_merges([])
181
 
 
182
167
        if verbose:
183
168
            note("commited r%d" % branch.revno())
184
169
    finally:
200
185
                   verbose):
201
186
    """Build inventory preparatory to commit.
202
187
 
203
 
    Returns missing_ids, new_inv, any_changes.
204
 
 
205
188
    This adds any changed files into the text store, and sets their
206
189
    test-id, sha and size in the returned inventory appropriately.
207
190
 
211
194
        working inventory.
212
195
    """
213
196
    from bzrlib.inventory import Inventory
214
 
    from bzrlib.osutils import isdir, isfile, sha_string, quotefn, \
 
197
    from osutils import isdir, isfile, sha_string, quotefn, \
215
198
         local_time_offset, username, kind_marker, is_inside_any
216
199
    
217
 
    from bzrlib.branch import gen_file_id
218
 
    from bzrlib.errors import BzrError
219
 
    from bzrlib.revision import Revision
 
200
    from branch import gen_file_id
 
201
    from errors import BzrError
 
202
    from revision import Revision
220
203
    from bzrlib.trace import mutter, note
221
204
 
222
 
    any_changes = False
223
 
    inv = Inventory(work_inv.root.file_id)
 
205
    inv = Inventory()
224
206
    missing_ids = []
225
207
    
226
208
    for path, entry in work_inv.iter_entries():
232
214
        mutter('commit prep file %s, id %r ' % (p, file_id))
233
215
 
234
216
        if specific_files and not is_inside_any(specific_files, path):
235
 
            mutter('  skipping file excluded from commit')
236
217
            if basis_inv.has_id(file_id):
237
218
                # carry over with previous state
238
219
                inv.add(basis_inv[file_id].copy())
244
225
        if not work_tree.has_id(file_id):
245
226
            if verbose:
246
227
                print('deleted %s%s' % (path, kind_marker(entry.kind)))
247
 
                any_changes = True
248
228
            mutter("    file is missing, removing from inventory")
249
229
            missing_ids.append(file_id)
250
230
            continue
296
276
            marked = path + kind_marker(entry.kind)
297
277
            if not old_ie:
298
278
                print 'added', marked
299
 
                any_changes = True
300
279
            elif old_ie == entry:
301
280
                pass                    # unchanged
302
281
            elif (old_ie.name == entry.name
303
282
                  and old_ie.parent_id == entry.parent_id):
304
283
                print 'modified', marked
305
 
                any_changes = True
306
284
            else:
307
285
                print 'renamed', marked
308
 
                any_changes = True
309
286
                        
310
 
    return missing_ids, inv, any_changes
 
287
    return missing_ids, inv
311
288
 
312
289