~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/delta.py

  • Committer: Aaron Bentley
  • Date: 2005-10-04 04:32:32 UTC
  • mfrom: (1185.12.6)
  • mto: (1185.12.13)
  • mto: This revision was merged to the branch mainline in revision 1419.
  • Revision ID: aaron.bentley@utoronto.ca-20051004043231-40302a149769263b
merged my own changes

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
    removed
27
27
        (path, id, kind)
28
28
    renamed
29
 
        (oldpath, newpath, id, kind, text_modified)
 
29
        (oldpath, newpath, id, kind, text_modified, meta_modified)
30
30
    modified
31
 
        (path, id, kind)
 
31
        (path, id, kind, text_modified, meta_modified)
32
32
    unchanged
33
33
        (path, id, kind)
34
34
 
35
35
    Each id is listed only once.
36
36
 
37
37
    Files that are both modified and renamed are listed only in
38
 
    renamed, with the text_modified flag true.
 
38
    renamed, with the text_modified flag true. The text_modified
 
39
    applies either to the the content of the file or the target of the
 
40
    symbolic link, depending of the kind of file.
39
41
 
40
42
    Files are only considered renamed if their name has changed or
41
43
    their parent directory has changed.  Renaming a directory
87
89
 
88
90
    def show(self, to_file, show_ids=False, show_unchanged=False):
89
91
        def show_list(files):
90
 
            for path, fid, kind in files:
 
92
            for item in files:
 
93
                path, fid, kind = item[:3]
 
94
 
91
95
                if kind == 'directory':
92
96
                    path += '/'
93
97
                elif kind == 'symlink':
94
98
                    path += '@'
95
 
                    
 
99
 
 
100
                if len(item) == 5 and item[4]:
 
101
                    path += '*'
 
102
 
96
103
                if show_ids:
97
104
                    print >>to_file, '  %-30s %s' % (path, fid)
98
105
                else:
108
115
 
109
116
        if self.renamed:
110
117
            print >>to_file, 'renamed:'
111
 
            for oldpath, newpath, fid, kind, text_modified in self.renamed:
 
118
            for (oldpath, newpath, fid, kind,
 
119
                 text_modified, meta_modified) in self.renamed:
 
120
                if meta_modified:
 
121
                    newpath += '*'
112
122
                if show_ids:
113
123
                    print >>to_file, '  %s => %s %s' % (oldpath, newpath, fid)
114
124
                else:
176
186
                old_sha1 = old_tree.get_file_sha1(file_id)
177
187
                new_sha1 = new_tree.get_file_sha1(file_id)
178
188
                text_modified = (old_sha1 != new_sha1)
 
189
                old_exec = old_tree.is_executable(file_id)
 
190
                new_exec = new_tree.is_executable(file_id)
 
191
                meta_modified = (old_exec != new_exec)
 
192
            elif kind == 'symlink':
 
193
                t1 = old_tree.get_symlink_target(file_id)
 
194
                t2 = new_tree.get_symlink_target(file_id)
 
195
                if t1 != t2:
 
196
                    mutter("    symlink target changed")
 
197
                    # FIXME: which should we use ?
 
198
                    text_modified = True
 
199
                    meta_modified = False
 
200
                else:
 
201
                    text_modified = False
 
202
                    meta_modified = False
179
203
            else:
180
204
                ## mutter("no text to check for %r %r" % (file_id, kind))
181
205
                text_modified = False
 
206
                meta_modified = False
182
207
 
183
208
            # TODO: Can possibly avoid calculating path strings if the
184
209
            # two files are unchanged and their names and parents are
190
215
                delta.renamed.append((old_inv.id2path(file_id),
191
216
                                      new_inv.id2path(file_id),
192
217
                                      file_id, kind,
193
 
                                      text_modified))
194
 
            elif text_modified:
195
 
                delta.modified.append((new_inv.id2path(file_id), file_id, kind))
 
218
                                      text_modified, meta_modified))
 
219
            elif text_modified or meta_modified:
 
220
                delta.modified.append((new_inv.id2path(file_id), file_id, kind,
 
221
                                       text_modified, meta_modified))
196
222
            elif want_unchanged:
197
223
                delta.unchanged.append((new_inv.id2path(file_id), file_id, kind))
198
224
        else: