279
 
@deprecated_function(one_zero)
 
280
 
def diff_cmd_helper(tree, specific_files, external_diff_options, 
 
281
 
                    old_revision_spec=None, new_revision_spec=None,
 
283
 
                    old_label='a/', new_label='b/'):
 
284
 
    """Helper for cmd_diff.
 
289
 
    :param specific_files:
 
290
 
        The specific files to compare, or None
 
292
 
    :param external_diff_options:
 
293
 
        If non-None, run an external diff, and pass it these options
 
295
 
    :param old_revision_spec:
 
296
 
        If None, use basis tree as old revision, otherwise use the tree for
 
297
 
        the specified revision. 
 
299
 
    :param new_revision_spec:
 
300
 
        If None, use working tree as new revision, otherwise use the tree for
 
301
 
        the specified revision.
 
303
 
    :param revision_specs: 
 
304
 
        Zero, one or two RevisionSpecs from the command line, saying what revisions 
 
305
 
        to compare.  This can be passed as an alternative to the old_revision_spec 
 
306
 
        and new_revision_spec parameters.
 
308
 
    The more general form is show_diff_trees(), where the caller
 
309
 
    supplies any two trees.
 
312
 
    # TODO: perhaps remove the old parameters old_revision_spec and
 
313
 
    # new_revision_spec, since this is only really for use from cmd_diff and
 
314
 
    # it now always passes through a sequence of revision_specs -- mbp
 
319
 
            revision = spec.in_store(tree.branch)
 
321
 
            revision = spec.in_store(None)
 
322
 
        revision_id = revision.rev_id
 
323
 
        branch = revision.branch
 
324
 
        return branch.repository.revision_tree(revision_id)
 
326
 
    if revision_specs is not None:
 
327
 
        assert (old_revision_spec is None
 
328
 
                and new_revision_spec is None)
 
329
 
        if len(revision_specs) > 0:
 
330
 
            old_revision_spec = revision_specs[0]
 
331
 
        if len(revision_specs) > 1:
 
332
 
            new_revision_spec = revision_specs[1]
 
334
 
    if old_revision_spec is None:
 
335
 
        old_tree = tree.basis_tree()
 
337
 
        old_tree = spec_tree(old_revision_spec)
 
339
 
    if (new_revision_spec is None
 
340
 
        or new_revision_spec.spec is None):
 
343
 
        new_tree = spec_tree(new_revision_spec)
 
345
 
    if new_tree is not tree:
 
346
 
        extra_trees = (tree,)
 
350
 
    return show_diff_trees(old_tree, new_tree, sys.stdout, specific_files,
 
351
 
                           external_diff_options,
 
352
 
                           old_label=old_label, new_label=new_label,
 
353
 
                           extra_trees=extra_trees)
 
356
278
def _get_trees_to_diff(path_list, revision_specs, old_url, new_url):
 
357
279
    """Get the trees and specific files to diff given a list of paths.
 
 
517
439
def _patch_header_date(tree, file_id, path):
 
518
440
    """Returns a timestamp suitable for use in a patch header."""
 
519
441
    mtime = tree.get_file_mtime(file_id, path)
 
520
 
    assert mtime is not None, \
 
521
 
        "got an mtime of None for file-id %s, path %s in tree %s" % (
 
523
442
    return timestamp.format_patch_date(mtime)
 
 
915
834
            extra_factories = []
 
916
835
        if external_diff_options:
 
917
 
            assert isinstance(external_diff_options, basestring)
 
918
836
            opts = external_diff_options.split()
 
919
837
            def diff_file(olab, olines, nlab, nlines, to_file):
 
920
838
                external_diff(olab, olines, nlab, nlines, to_file, opts)