Skip to content
  • Jeff King's avatar
    clone: do not clean up directories we didn't create · d45420c1
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    Once upon a time, git-clone would refuse to write into a
    directory that it did not itself create. The cleanup
    routines for a failed clone could therefore just remove the
    git and worktree dirs completely.
    
    In 55892d23
    
     (Allow cloning to an existing empty directory,
    2009-01-11), we learned to write into an existing directory.
    Which means that doing:
    
      mkdir foo
      git clone will-fail foo
    
    ends up deleting foo. This isn't a huge catastrophe, since
    by definition foo must be empty. But it's somewhat
    confusing; we should leave the filesystem as we found it.
    
    Because we know that the only directory we'll write into is
    an empty one, we can handle this case by just passing the
    KEEP_TOPLEVEL flag to our recursive delete (if we could
    write into populated directories, we'd have to keep track of
    what we wrote and what we did not, which would be much
    harder).
    
    Note that we need to handle the work-tree and git-dir
    separately, though, as only one might exist (and the new
    tests in t5600 cover all cases).
    
    Reported-by: default avatarStephan Janssen <sjanssen@you-get.com>
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    d45420c1