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 <[EMAIL PROTECTED]> * 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 <[EMAIL PROTECTED]>. *** 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"