~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/log.py

  • Committer: Martin Pool
  • Date: 2005-05-05 07:43:42 UTC
  • Revision ID: mbp@sourcefrog.net-20050505074342-6b2d3c39edc0c4cd
- New command touching-revisions and function to trace
  changes to a given file.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
 
17
 
 
18
 
 
19
 
 
20
def find_touching_revisions(branch, file_id):
 
21
    """Yield a description of revisions which affect the file_id.
 
22
 
 
23
    Each returned element is (revno, revision_id, description)
 
24
 
 
25
    This is the list of revisions where the file is either added,
 
26
    modified, renamed or deleted.
 
27
 
 
28
    Revisions are returned in chronological order.
 
29
 
 
30
    TODO: Perhaps some way to limit this to only particular revisions,
 
31
    or to traverse a non-branch set of revisions?
 
32
    """
 
33
    last_ie = None
 
34
    last_path = None
 
35
    revno = 1
 
36
    for revision_id in branch.revision_history():
 
37
        this_inv = branch.get_revision_inventory(revision_id)
 
38
        if file_id in this_inv:
 
39
            this_ie = this_inv[file_id]
 
40
            this_path = this_inv.id2path(file_id)
 
41
        else:
 
42
            this_ie = this_path = None
 
43
 
 
44
        # now we know how it was last time, and how it is in this revision.
 
45
        # are those two states effectively the same or not?
 
46
 
 
47
        if not this_ie and not last_ie:
 
48
            # not present in either
 
49
            pass
 
50
        elif this_ie and not last_ie:
 
51
            yield revno, revision_id, "added " + this_path
 
52
        elif not this_ie and last_ie:
 
53
            # deleted here
 
54
            yield revno, revision_id, "deleted " + last_path
 
55
        elif this_path != last_path:
 
56
            yield revno, revision_id, ("renamed %s => %s" % (last_path, this_path))
 
57
        elif (this_ie.text_size != last_ie.text_size
 
58
              or this_ie.text_sha1 != last_ie.text_sha1):
 
59
            yield revno, revision_id, "modified " + this_path
 
60
 
 
61
        last_ie = this_ie
 
62
        last_path = this_path
 
63
        revno += 1
 
64
 
 
65
 
17
66
def show_log(branch, show_timezone='original', verbose=False,
18
67
             show_ids=False,
19
68
             to_file=None):