[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Quilt-dev] Annotate any version of a file
From: |
Jean Delvare |
Subject: |
Re: [Quilt-dev] Annotate any version of a file |
Date: |
Mon, 12 Sep 2005 22:11:51 +0200 |
Hi Andreas, all,
> > I didn't know this simplified syntax was allowed. Are you sure it'll
> > work with older versions of bash though?
>
> I don't know.
Works at least back to bash 2.05. I'm sure John will complain if it
beaks 2.04.
> > Oh, one last thing: this new code seems to be slightly faster than
> > the original, which is great :)
>
> Good.
So here comes the (hopefully final) cleaned up version. Is it OK if I
commit this to CVS? Or maybe you want to commit it yourself, after all
the code is mostly yours now.
Thanks.
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 12 Sep 2005 20:05:35 -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.6
diff -u -r1.6 annotate.in
--- quilt/annotate.in 11 Sep 2005 08:36:13 -0000 1.6
+++ quilt/annotate.in 12 Sep 2005 20:05:35 -0000
@@ -19,12 +19,16 @@
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. Only applied patches are included.
+
+-p patch
+ Stop checking for changes at the specified rather than the
+ topmost patch.
"
exit 0
else
@@ -34,24 +38,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 +85,7 @@
exec 4<&-
}
-options=`getopt -o h -- "$@"`
+options=`getopt -o p:h -- "$@"`
if [ $? -ne 0 ]
then
@@ -101,6 +97,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 +118,38 @@
fi
opt_file="$SUBDIR$1"
+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
- if [ -f "$(backup_file_name $patch "$opt_file")" ]
+ 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 +170,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 12 Sep 2005 20:05:35 -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
--
Jean Delvare