summaryrefslogtreecommitdiff
path: root/admin/revdiff
diff options
context:
space:
mode:
Diffstat (limited to 'admin/revdiff')
-rwxr-xr-xadmin/revdiff25
1 files changed, 19 insertions, 6 deletions
diff --git a/admin/revdiff b/admin/revdiff
index bdd6a2210ce..f145da19c4a 100755
--- a/admin/revdiff
+++ b/admin/revdiff
@@ -27,13 +27,18 @@ if (@ARGV < 3)
revdiff FILE OLD NEW
Get a diff of FILE between revisions OLD and NEW. Store the
-diff in a file named FILE-OLD-NEW.diff. If NEW is +<number>
-or -<number>, build diffs between revisions OLD and OLD +/- <number>.
-OLD being `-' means use FILE's current revision.
+diff in a file named FILE-OLD-NEW.diff.
+
+If OLD is `-' use FILE's current revision for OLD. If OLD is
+`-<number>', use the Nth revision before the current one for OLD.
+
+If NEW is +<number> or -<number>, build diffs between revisions OLD
+and OLD +/- <number>.
Examples:
revdiff FILE - -1 get the latest change of FILE
+revdiff FILE -1 +1 also gets the latest change of FILE
revdiff FILE 1.500 +2 get diffs 1.500-1.501 and 1.501-1.502.
USAGE
@@ -73,9 +78,17 @@ sub current_revision ($)
}
if ($old eq "-")
-{
- $old = current_revision ($file);
-}
+ {
+ $old = current_revision ($file);
+ }
+elsif ($old =~ /^-(\d+)$/)
+ {
+ my $offset = $1;
+ $old = current_revision ($file);
+ die "Internal error" unless $old =~ /(.*)\.(\d+)$/;
+ my $minor = $2 - $offset;
+ $old = sprintf ("%d.%d", $1, $minor);
+ }
while (@ARGV)
{