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 10:57:51 -0000 @@ -132,8 +132,15 @@ esac ;; annotate) - _quilt_comfile - COMPREPLY=( address@hidden:-} $( compgen -W "-h" -- $cur ) ) + case $prev in + -p) + COMPREPLY=( $( compgen -W "$(quilt applied)" -- $cur ) ) + ;; + *) + _quilt_comfile + COMPREPLY=( address@hidden:-} $( 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 10:57:53 -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 @@ -34,24 +37,16 @@ empty_file() { - local patch=$1 file=$2 - local backup_file=$(backup_file_name $patch $file) - [ -s "$backup_file" ] \ - && sed -e 's:.*::' "$backup_file" + local file=$1 + [ -s "$file" ] \ + && sed -e 's:.*::' "$file" } annotation_for() { - local patch=$1 next_patch=$2 file=$3 annotation=$4 - local old_file=$(backup_file_name $patch "$file") new_file + local old_file=$1 new_file=$2 annotation=$3 [ -s "$old_file" ] || old_file=/dev/null - if [ -z "$next_patch" ] - then - new_file="$file" - else - new_file="$(backup_file_name $next_patch $file)" - [ -s "$new_file" ] || new_file=/dev/null - fi + [ -s "$new_file" ] || new_file=/dev/null @DIFF@ -Ne "$old_file" "$new_file" \ | @PERL@ -e ' while (<>) { @@ -89,7 +84,7 @@ exec 4<&- } -options=`getopt -o h -- "$@"` +options=`getopt -o p:h -- "$@"` if [ $? -ne 0 ] then @@ -101,6 +96,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,16 +117,38 @@ fi opt_file="$SUBDIR$1" -for patch in $(cat_series); do - if [ -f "$(backup_file_name $patch "$opt_file")" ] +if [ -n "$opt_patch" ] && ! is_applied "$opt_patch" +then + printf $"Patch %s is not applied\n" \ + "$(print_patch $opt_patch)" >&2 + exit 1 +fi + +for patch in $(applied_patches); do + old_file="$(backup_file_name $patch "$opt_file")" + if [ -f "$old_file" ] then address@hidden"$patch" + address@hidden"$old_file" + 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 + address@hidden"$opt_file" +else + address@hidden"$(backup_file_name $next_patch "$opt_file")" +fi + if [ address@hidden = 0 ] then - sed -e 's:^:'$'\t'':' "$opt_file" + sed -e 's:^:'$'\t'':' "address@hidden" exit 0 fi @@ -145,19 +169,18 @@ # Finally, the annotations listing is merged with the source file line # by line. -empty_file ${patches[0]} "$opt_file" > $template +empty_file ${files[0]} > $template for ((n = 0; n < address@hidden; n++)) do - annotation_for "${patches[$n]}" "${patches[$((n+1))]}" "$opt_file" \ - $((n+1)) + annotation_for "${files[n]}" "${files[n+1]}" $((n+1)) done \ | @PATCH@ $template -merge_files $template "$opt_file" +merge_files $template "address@hidden" echo for ((n = 0; n < address@hidden; n++)) do - echo "$((n+1))"$'\t'"$(print_patch ${patches[$n]})" + echo "$((n+1))"$'\t'"$(print_patch ${patches[n]})" done ### Local Variables: 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 10:57:53 -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