chiark / gitweb /
dgit: gitattributes: Defuse working-tree-encoding
[dgit.git] / dgit
diff --git a/dgit b/dgit
index e7a6904151a842c9d5b7bf7b2afb3b48fdba4ce7..94f915efe5ab16836fbe1f9f36f4b2f4f46983f9 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -3396,15 +3396,23 @@ sub open_main_gitattrs () {
 our $gitattrs_ourmacro_re = qr{^\[attr\]dgit-defuse-attrs\s};
 
 sub is_gitattrs_setup () {
+    # return values:
+    #  trueish
+    #     1: gitattributes set up and should be left alone
+    #  falseish
+    #     0: there is a dgit-defuse-attrs but it needs fixing
+    #     undef: there is none
     my $gai = open_main_gitattrs();
     return 0 unless $gai;
     while (<$gai>) {
        next unless m{$gitattrs_ourmacro_re};
-       return 1;
+       return 1 if m{\s-working-tree-encoding\s};
+       printdebug "is_gitattrs_setup: found old macro\n";
+       return 0;
     }
     $gai->error and die $!;
     printdebug "is_gitattrs_setup: found nothing\n";
-    return 0;
+    return undef;
 }    
 
 sub setup_gitattrs (;$) {
@@ -3414,7 +3422,7 @@ sub setup_gitattrs (;$) {
     my $already = is_gitattrs_setup();
     if ($already) {
        progress <<END;
-[attr]dgit-defuse-attrs already found in .git/info/attributes
+[attr]dgit-defuse-attrs already found, and proper, in .git/info/attributes
  not doing further gitattributes setup
 END
        return;
@@ -3424,7 +3432,7 @@ END
     ensuredir "$maindir_gitcommon/info";
 
     open GAO, "> $af.new" or die $!;
-    print GAO <<END or die $!;
+    print GAO <<END or die $! unless defined $already;
 *      dgit-defuse-attrs
 $new
 # ^ see GITATTRIBUTES in dgit(7) and dgit setup-new-tree in dgit(1)
@@ -3432,6 +3440,10 @@ END
     my $gai = open_main_gitattrs();
     if ($gai) {
        while (<$gai>) {
+           if (m{$gitattrs_ourmacro_re}) {
+               die unless defined $already;
+               $_ = $new;
+           }
            chomp;
            print GAO $_, "\n" or die $!;
        }
@@ -3466,7 +3478,7 @@ sub check_gitattrs ($$) {
        # oh dear, found one
        print STDERR <<END;
 dgit: warning: $what contains .gitattributes
-dgit: .gitattributes have not been defused.  Recommended: dgit setup-new-tree.
+dgit: .gitattributes not (fully) defused.  Recommended: dgit setup-new-tree.
 END
        close $gafl;
        return;