~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/log.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-01-29 13:17:03 UTC
  • mfrom: (3972.1.2 ianc-integration)
  • Revision ID: pqm@pqm.ubuntu.com-20090129131703-lgus0aiclez3isj6
Use historical context for file logging (Ian Clatworthy)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1222
1222
        lf.log_revision(lr)
1223
1223
 
1224
1224
 
 
1225
def _get_fileid_to_log(revision, tree, b, fp):
 
1226
    """Find the file-id to log for a file path in a revision range.
 
1227
 
 
1228
    :param revision: the revision range as parsed on the command line
 
1229
    :param tree: the working tree, if any
 
1230
    :param b: the branch
 
1231
    :param fp: file path
 
1232
    """
 
1233
    if revision is None:
 
1234
        if tree is None:
 
1235
            tree = b.basis_tree()
 
1236
        file_id = tree.path2id(fp)
 
1237
        if file_id is None:
 
1238
            # go back to when time began
 
1239
            try:
 
1240
                rev1 = b.get_rev_id(1)
 
1241
            except errors.NoSuchRevision:
 
1242
                # No history at all
 
1243
                file_id = None
 
1244
            else:
 
1245
                tree = b.repository.revision_tree(rev1)
 
1246
                file_id = tree.path2id(fp)
 
1247
 
 
1248
    elif len(revision) == 1:
 
1249
        # One revision given - file must exist in it
 
1250
        tree = revision[0].as_tree(b)
 
1251
        file_id = tree.path2id(fp)
 
1252
 
 
1253
    elif len(revision) == 2:
 
1254
        # Revision range given. Get the file-id from the end tree.
 
1255
        # If that fails, try the start tree.
 
1256
        rev_id = revision[1].as_revision_id(b)
 
1257
        if rev_id is None:
 
1258
            tree = b.basis_tree()
 
1259
        else:
 
1260
            tree = revision[1].as_tree(b)
 
1261
        file_id = tree.path2id(fp)
 
1262
        if file_id is None:
 
1263
            rev_id = revision[0].as_revision_id(b)
 
1264
            if rev_id is None:
 
1265
                rev1 = b.get_rev_id(1)
 
1266
                tree = b.repository.revision_tree(rev1)
 
1267
            else:
 
1268
                tree = revision[0].as_tree(b)
 
1269
            file_id = tree.path2id(fp)
 
1270
    else:
 
1271
        raise errors.BzrCommandError(
 
1272
            'bzr log --revision takes one or two values.')
 
1273
    return file_id
 
1274
 
 
1275
 
1225
1276
properties_handler_registry = registry.Registry()
1226
1277
properties_handler_registry.register_lazy("foreign",
1227
1278
                                          "bzrlib.foreign",