On Saturday 10 September 2005 22:41, Jean Delvare wrote:
> Hi all,
>
> I might need to be able to annotate any version of a file, rather than
> its current state, in a near future. So I started hacking the quilt
> annotate command. Now I have working code, so I thought I'd just post it
> here for review and comments. In particular, I would like to know if
> there is a general interest in having this feature added to quilt.
>
> Concretely, I have been adding a -p option to annotate, and when used,
> the annotation loop stops at this patch rather than going on up to the
> top patch. My tests are successful, and I've extended the test suite to
> test this option.
The annotate help text failed to mention that only applied patches will show
(which I first thought was kind of obvious). So the same effect could also be
achieved by popping to the right patch. It may still be useful to add the -p
option, in particular because a patch later on the stack might remove text
(e.g., move it around), and the information which patches modified that text
is not contained in the final annotation.
> You'll see a comment about next_patch needing to be computed again -
> that's the point that raised my earlier questions about variables and
> pipes. If anyone can find a more elegant implementation, please speak
> up.
I see now what you were struggling with. In this case I would probably have
moved the "| @PATCH@ $template" inside the loop, or switched to a tempfile
for the entire patch. What do you think of the attached version instead
though? It's almost the same but cleaner.
> Two more notes:
>
> 1* "quilt annotate -p $(quilt top) file" is the same as "quilt annotate
> file", so both commands should always behave the same.
Yes.
> 2* I replaced a call to print_series() by a call to applied_patches() in
^ cat_series you mean.
> the process (in the case -p isn't used) as it seemed more optimal to me
> that way. If I'm wrong, just let me know. If I'm not, then this change
> can go in even if this patch doesn't.
That's an improvement, yes.
Cheers,
Andreas.
Index: bash_completion
===================================================================
RCS file: /cvsroot/quilt/quilt/bash_completion,v
retrieving revision 1.19
diff -u -r1.19 bash_completion
--- bash_completion 26 Aug 2005 10:20:48 -0000 1.19
+++ bash_completion 11 Sep 2005 01:58:28 -0000
@@ -132,8 +132,15 @@
esac
;;
annotate)
- _quilt_comfile
- COMPREPLY=( [EMAIL PROTECTED]:-} $( compgen -W "-h" -- $cur ) )
+ case $prev in
+ -p)
+ COMPREPLY=( $( compgen -W "$(quilt applied)" -- $cur ) )
+ ;;
+ *)
+ _quilt_comfile
+ COMPREPLY=( [EMAIL PROTECTED]:-} $( compgen -W "-p -h" -- $cur ) )
+ ;;
+ esac
;;
applied)
COMPREPLY=( $( compgen -W "-h $(quilt applied)" -- $cur ) )
Index: quilt/annotate.in
===================================================================
RCS file: /cvsroot/quilt/quilt/quilt/annotate.in,v
retrieving revision 1.5
diff -u -r1.5 annotate.in
--- quilt/annotate.in 18 Jul 2005 10:18:13 -0000 1.5
+++ quilt/annotate.in 11 Sep 2005 01:58:29 -0000
@@ -19,12 +19,15 @@
usage()
{
- printf $"Usage: quilt annotate {file}\n"
+ printf $"Usage: quilt [-p patch] annotate {file}\n"
if [ x$1 = x-h ]
then
printf $"
Print an annotated listing of the specified file showing which
-patches modify which lines.
+patches modify which lines. Only applied patches are included.
+
+-p Stop checking for changes at the specified rather than the
+ topmost patch.
"
exit 0
else
@@ -89,7 +92,7 @@
exec 4<&-
}
-options=`getopt -o h -- "$@"`
+options=`getopt -o p:h -- "$@"`
if [ $? -ne 0 ]
then
@@ -101,6 +104,13 @@
while true
do
case "$1" in
+ -p)
+ if ! opt_patch=$(find_patch $2)
+ then
+ printf $"Patch %s is not in series\n" "$2" >&2
+ exit 1
+ fi
+ shift 2 ;;
-h)
usage -h ;;
--)
@@ -115,12 +125,24 @@
fi
opt_file="$SUBDIR$1"
-for patch in $(cat_series); do
+for patch in $(applied_patches); do
if [ -f "$(backup_file_name $patch "$opt_file")" ]
then
[EMAIL PROTECTED]"$patch"
fi
+ if [ "$opt_patch" = $patch ]
+ then
+ # We also need to know the next patch, if any
+ next_patch="$(next_patch_for_file "$opt_patch" "$opt_file")"
+ break
+ fi
done
+if [ -z "$next_patch" ]
+then
+ last_file="$opt_file"
+else
+ last_file="$(backup_file_name $next_patch "$opt_file")"
+fi
if [ [EMAIL PROTECTED] = 0 ]
then
@@ -148,11 +170,13 @@
empty_file ${patches[0]} "$opt_file" > $template
for ((n = 0; n < [EMAIL PROTECTED]; n++))
do
- annotation_for "${patches[$n]}" "${patches[$((n+1))]}" "$opt_file" \
+ annotation_for "${patches[$n]}" \
+ "${patches[$((n+1))]:-$next_patch}" \
+ "$opt_file" \
$((n+1))
done \
| @PATCH@ $template
-merge_files $template "$opt_file"
+merge_files $template "$last_file"
echo
for ((n = 0; n < [EMAIL PROTECTED]; n++))
Index: test/annotate.test
===================================================================
RCS file: /cvsroot/quilt/quilt/test/annotate.test,v
retrieving revision 1.3
diff -u -r1.3 annotate.test
--- test/annotate.test 9 Sep 2005 18:27:51 -0000 1.3
+++ test/annotate.test 11 Sep 2005 01:58:29 -0000
@@ -62,6 +62,29 @@
> 2 patches/patch2
> 3 patches/patch3
+ $ quilt annotate -p patch3 foo
+ > foo
+ > 2 baz
+ >
+ > 1 patches/patch
+ > 2 patches/patch2
+ > 3 patches/patch3
+
+ $ quilt annotate -p patch2 foo
+ > foo
+ > 1 Bar
+ > 2 baz
+ >
+ > 1 patches/patch
+ > 2 patches/patch2
+
+ $ quilt annotate -p patch foo
+ > foo
+ > 1 Bar
+ > 1 Baz
+ >
+ > 1 patches/patch
+
$ quilt new patch4
> Patch patches/patch4 is now on top
_______________________________________________
Quilt-dev mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/quilt-dev