1
*** modified file 'bzrlib/commands.py'
 
 
8
-    takes_options = ['revision', 'diff-options']
 
 
9
+    takes_options = ['revision', 'diff-options', 'ndiff']
 
 
10
     aliases = ['di', 'dif']
 
 
12
-    def run(self, revision=None, file_list=None, diff_options=None):
 
 
13
+    def run(self, revision=None, file_list=None, diff_options=None,
 
 
15
         from bzrlib.diff import show_diff
 
 
29
         show_diff(b, revision, specific_files=file_list,
 
 
30
-                  external_diff_options=diff_options)
 
 
31
+                  external_diff_options=diff_options,
 
 
43
     'revision':               _parse_revision_str,
 
 
45
*** modified file 'bzrlib/diff.py'
 
 
53
+def internal_ndiff(old_label, oldlines,
 
 
54
+                   new_label, newlines,
 
 
56
+    """Show diff in python-specific ndiff format."""
 
 
57
+    from difflib import ndiff
 
 
58
+    to_file.writelines(ndiff(oldlines, newlines))
 
 
61
 def external_diff(old_label, oldlines, new_label, newlines, to_file,
 
 
66
-def show_diff(b, revision, specific_files, external_diff_options=None):
 
 
67
+def show_diff(b, revision, specific_files, external_diff_options=None,
 
 
69
     """Shortcut for showing the diff to the working tree.
 
 
75
         None for each, or otherwise the old revision to compare against.
 
 
78
+        'unified', 'context', 'ndiff', 'external'
 
 
80
     The more general form is show_diff_trees(), where the caller
 
 
81
     supplies any two trees.
 
 
83
     new_tree = b.working_tree()
 
 
85
     show_diff_trees(old_tree, new_tree, sys.stdout, specific_files,
 
 
86
-                    external_diff_options)
 
 
87
+                    external_diff_options, format)
 
 
91
 def show_diff_trees(old_tree, new_tree, to_file, specific_files=None,
 
 
92
-                    external_diff_options=None):
 
 
93
+                    external_diff_options=None,
 
 
95
     """Show in text form the changes from one tree to another.
 
 
99
     if external_diff_options:
 
 
100
         assert isinstance(external_diff_options, basestring)
 
 
101
         opts = external_diff_options.split()
 
 
102
-        def diff_file(olab, olines, nlab, nlines, to_file):
 
 
103
+        def diff_fn(olab, olines, nlab, nlines, to_file):
 
 
104
             external_diff(olab, olines, nlab, nlines, to_file, opts)
 
 
105
+    elif format == 'ndiff':
 
 
106
+        diff_fn = internal_ndiff
 
 
108
-        diff_file = internal_diff
 
 
109
+        diff_fn = internal_diff
 
 
112
     delta = compare_trees(old_tree, new_tree, want_unchanged=False,
 
 
114
     for path, file_id, kind in delta.removed:
 
 
115
         print >>to_file, '*** removed %s %r' % (kind, path)
 
 
117
-            diff_file(old_label + path,
 
 
118
+            diff_fn(old_label + path,
 
 
119
                       old_tree.get_file(file_id).readlines(),
 
 
123
     for path, file_id, kind in delta.added:
 
 
124
         print >>to_file, '*** added %s %r' % (kind, path)
 
 
130
                       new_tree.get_file(file_id).readlines(),
 
 
132
     for old_path, new_path, file_id, kind, text_modified in delta.renamed:
 
 
133
         print >>to_file, '*** renamed %s %r => %r' % (kind, old_path, new_path)
 
 
135
-            diff_file(old_label + old_path,
 
 
136
+            diff_fn(old_label + old_path,
 
 
137
                       old_tree.get_file(file_id).readlines(),
 
 
138
                       new_label + new_path,
 
 
139
                       new_tree.get_file(file_id).readlines(),
 
 
141
     for path, file_id, kind in delta.modified:
 
 
142
         print >>to_file, '*** modified %s %r' % (kind, path)
 
 
144
-            diff_file(old_label + path,
 
 
145
+            diff_fn(old_label + path,
 
 
146
                       old_tree.get_file(file_id).readlines(),
 
 
148
                       new_tree.get_file(file_id).readlines(),