[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
function needed (to simplify diff output)
From: |
Samuel Wales |
Subject: |
function needed (to simplify diff output) |
Date: |
Thu, 25 Dec 2008 17:38:03 -0700 |
I need a function and hope that somebody can help implement
it.
The purpose is to simplify diff -u for human viewing by
eliminating trivial changes, including line moves.
My algorithm is very simple:
1. Process the text after the + or - with PROCESSOR.
Default: no processing.
2. Of the + and - lines, show only those with unique
text.
3. Replace lines like "@@ -1,3 +1,6 @@" with "...".
The unique lines step detects line moves. It will also
eliminate duplicated lines, but that's OK.
The processing step lets you specify what else is trivial
besides line moves. For example, if you don't need to see
changes that involve commenting and uncommenting, you pass a
function that deletes "^#". This makes both sides of the
diff uncommented.
As another example, you can tell diff to ignore headline
level changes in org mode by deleting "^\*+ ". Your diffs
will not show any changes in the headline structure, but
will show other changes. This is particularly useful.
This command would be useful to assign to a key in a version
control interface like egg.el.
Example:
Here is a diff hunk that you can call the function on.
diff -u ?????
--- aaaaa 2008-12-25 11:06:12.000000000 -0700
+++ bbbbb 2008-12-25 11:06:11.000000000 -0700
@@ -1,3 +1,6 @@
+will be moved
+will also be moved
+this will be moved
the same
the same again 1
the same again 2
@@ -5,12 +8,8 @@
the same again 4
the same again 5
still the same
-only in aaaaa
-will be deleted
-will be commented
-will be moved
-will also be moved
-this will be moved
+only in bbbbb!
+#will be commented
another identical line
another identical line
The output will be the following if the preprocessor removes
comment-start from every line that has it. Note that the
"will be commented" line and the moved lines are eliminated.
diff -u ?????
--- aaaaa 2008-12-25 11:06:12.000000000 -0700
+++ bbbbb 2008-12-25 11:06:11.000000000 -0700
...
the same
the same again 1
the same again 2
...
the same again 4
the same again 5
still the same
-only in aaaaa
-will be deleted
+only in bbbbb!
another identical line
another identical line
Here is what I have so far:
(defun fix-diff (&optional processor)
"When point is near a diff -u hunk, pop up a
buffer with that hunk cleaned up for human viewing.
By default, just eliminate evidence of line moves from the
diff and replace lines like "@@ -1,3 +1,6 @@" with "...".
(This also eliminates evidence of duplicated lines.)
With PROCESSOR, first call processor on a temporary buffer
that consists of the diff hunk with the first column (the
one that has + and -) removed.
For example, if the diff is of two versions of a shell
script, and processor deletes all instances of the regexp
"^#", then the cleaned-up diff output will not have any
evidence of lines that are commented in one version and
uncommented in the other."
(interactive)
;;this is the part i can't do
)
Thanks.
--
Myalgic encephalomyelitis denialists are knowingly causing further
suffering and death by opposing biomedical research on this serious
infectious disease. Do you care about the world?
http://www.meactionuk.org.uk/What_Is_ME_What_Is_CFS.htm
- function needed (to simplify diff output),
Samuel Wales <=