Skip to content
  • Jeff King's avatar
    clone: use computed length in guess_dir_name · db2e2204
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    Commit 7e837c64
    
     (clone: simplify string handling in
    guess_dir_name(), 2015-07-09) changed clone to use
    strip_suffix instead of hand-rolled pointer manipulation.
    However, strip_suffix will strip from the end of a
    NUL-terminated string, and we may have already stripped some
    characters (like directory separators, or "/.git"). This
    leads to commands like:
    
      git clone host:foo.git/
    
    failing to strip the ".git".
    
    We must instead convert our pointer arithmetic into a
    computed length and feed that to strip_suffix_mem, which will
    then reduce the length further for us.
    
    It would be nicer if we could drop the pointer manipulation
    entirely, and just continually strip using strip_suffix. But
    that doesn't quite work for two reasons:
    
      1. The early suffixes we're stripping are not constant; we
         need to look for is_dir_sep, which could be one of
         several characters.
    
      2. Mid-way through the stripping we compute the pointer
         "start", which shows us the beginning of the pathname.
         Which really give us two lengths to work with: the
         offset from the start of the string, and from the start
         of the path. By using pointers for the early part, we
         can just compute the length from "start" when we need
         it.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Acked-by: default avatarSebastian Schuberth <sschuberth@gmail.com>
    Signed-off-by: default avatarPatrick Steinhardt <ps@pks.im>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    db2e2204