chiark / gitweb /
Do not call "warn" on failure of cleanup handler in END block (since warn has been...
[dgit.git] / dgit
diff --git a/dgit b/dgit
index 9edc6577a4feb3a46129321570bac783ade70c11..507be273f3f0b4c5b4debb44de0c060e62eaeb53 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -155,7 +155,7 @@ END {
     local ($?);
     foreach my $f (@end) {
        eval { $f->(); };
-       warn "$us: cleanup: $@" if length $@;
+       print STDERR "$us: cleanup: $@" if length $@;
     }
 };
 
@@ -2131,7 +2131,13 @@ sub cmd_clone {
                return if $!==&ENOENT;
                die "chdir $cwd_remove: $!";
            }
-           rmtree($dstdir) or die "remove $dstdir: $!\n";
+           if (stat $dstdir) {
+               rmtree($dstdir) or die "remove $dstdir: $!\n";
+           } elsif (!grep { $! == $_ }
+                    (ENOENT, ENOTDIR, EACCES, EPERM, ELOOP)) {
+           } else {
+               print STDERR "check whether to remove $dstdir: $!\n";
+           }
        };
     }