bug-gnulib
[Top][All Lists]
Advanced

[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"





reply via email to

[Prev in Thread] Current Thread [Next in Thread]