[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: --anchor-vc-ignore
From: |
Bruno Haible |
Subject: |
Re: --anchor-vc-ignore |
Date: |
Sat, 2 Aug 2008 13:38:52 +0200 |
User-agent: |
KMail/1.5.4 |
Hi,
Joel E. Denny wrote:
> Would you consider adding a --anchor-vc-ignore option to gnulib-tool?
> This option would tell gnulib-tool to precede every .gitignore entry it
> creates with "/" so that, as with .cvsignore, the entry would not apply
> recursively to subdirectories.
Oh, I wasn't aware of this difference in semantics between the .cvsignore
syntax and the .gitignore syntax.
gnulib-tool was only meant to add entries for the files that it imports or
creates. It was never meant to add "recursive" .gitignore entries. The
current behaviour is simply a bug. I'm fixing it like this, without a
command-line option.
Bruno
2008-08-02 Bruno Haible <address@hidden>
* gnulib-tool (func_import): When updating or creating a .gitignore
file, prepend each added line with a slash, and ignore leading slashes
from the existing lines.
Reported by Joel E. Denny <address@hidden>.
*** gnulib-tool.orig 2008-08-02 13:32:38.000000000 +0200
--- gnulib-tool 2008-08-02 13:21:45.000000000 +0200
***************
*** 3258,3266 ****
func_update_ignorelist ()
{
ignore="$1"
if test -f "$destdir/$dir$ignore"; then
if test -n "$dir_added" || test -n "$dir_removed"; then
! LC_ALL=C sort "$destdir/$dir$ignore" > "$tmp"/ignore
echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u \
| LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-added
echo "$dir_removed" | sed -e '/^$/d' | LC_ALL=C sort -u \
--- 3258,3277 ----
func_update_ignorelist ()
{
ignore="$1"
+ if test "$ignore" = .gitignore; then
+ # In a .gitignore file, "foo" applies to the current directory and
all
+ # subdirectories, whereas "/foo" applies to the current directory
only.
+ anchor='/'
+ escaped_anchor='\/'
+ doubly_escaped_anchor='\\/'
+ else
+ anchor=''
+ escaped_anchor=''
+ doubly_escaped_anchor=''
+ fi
if test -f "$destdir/$dir$ignore"; then
if test -n "$dir_added" || test -n "$dir_removed"; then
! sed -e "s|^$anchor||" < "$destdir/$dir$ignore" | LC_ALL=C sort >
"$tmp"/ignore
echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u \
| LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-added
echo "$dir_removed" | sed -e '/^$/d' | LC_ALL=C sort -u \
***************
*** 3269,3277 ****
if $doit; then
echo "Updating $destdir/$dir$ignore (backup in
$destdir/$dir${ignore}~)"
mv -f "$destdir/$dir$ignore" "$destdir/$dir$ignore"~
! sed -e 's,^,/^,' -e 's,$,\$/d,' < "$tmp"/ignore-removed >
"$tmp"/sed-ignore-removed
! cat "$destdir/$dir$ignore"~ "$tmp"/ignore-added \
! | sed -f "$tmp"/sed-ignore-removed \
> "$destdir/$dir$ignore"
else
echo "Update $destdir/$dir$ignore (backup in
$destdir/$dir${ignore}~)"
--- 3280,3291 ----
if $doit; then
echo "Updating $destdir/$dir$ignore (backup in
$destdir/$dir${ignore}~)"
mv -f "$destdir/$dir$ignore" "$destdir/$dir$ignore"~
! { sed -e 's,^,/^,' -e 's,$,\$/d,' < "$tmp"/ignore-removed
! if test -n "$anchor"; then sed -e
"s,^,/^${doubly_escaped_anchor}," -e 's,$,\$/d,' < "$tmp"/ignore-removed; fi
! } > "$tmp"/sed-ignore-removed
! { cat "$destdir/$dir$ignore"~
! sed -e "s|^|$anchor|" < "$tmp"/ignore-added
! } | sed -f "$tmp"/sed-ignore-removed \
> "$destdir/$dir$ignore"
else
echo "Update $destdir/$dir$ignore (backup in
$destdir/$dir${ignore}~)"
***************
*** 3288,3294 ****
# Automake generates Makefile rules that create .dirstamp
files.
echo ".dirstamp"
fi
! echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u
} > "$destdir/$dir$ignore"
else
echo "Create $destdir/$dir$ignore"
--- 3302,3308 ----
# Automake generates Makefile rules that create .dirstamp
files.
echo ".dirstamp"
fi
! echo "$dir_added" | sed -e '/^$/d' -e "s|^|$anchor|" |
LC_ALL=C sort -u
} > "$destdir/$dir$ignore"
else
echo "Create $destdir/$dir$ignore"