Skip to content
  • Duy Nguyen's avatar
    fetch, upload-pack: --deepen=N extends shallow boundary by N commits · cccf74e2
    Duy Nguyen authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    In git-fetch, --depth argument is always relative with the latest
    remote refs. This makes it a bit difficult to cover this use case,
    where the user wants to make the shallow history, say 3 levels
    deeper. It would work if remote refs have not moved yet, but nobody
    can guarantee that, especially when that use case is performed a
    couple months after the last clone or "git fetch --depth". Also,
    modifying shallow boundary using --depth does not work well with
    clones created by --since or --not.
    
    This patch fixes that. A new argument --deepen=<N> will add <N> more (*)
    parent commits to the current history regardless of where remote refs
    are.
    
    Have/Want negotiation is still respected. So if remote refs move, the
    server will send two chunks: one between "have" and "want" and another
    to extend shallow history. In theory, the client could send no "want"s
    in order to get the second chunk only. But the protocol does not allow
    that. Either you send no want lines, which means ls-remote; or you
    have to send at least one want line that carries deep-relative to the
    server..
    
    The main work was done by Dongcan Jiang. I fixed it up here and there.
    And of course all the bugs belong to me.
    
    (*) We could even support --deepen=<N> where <N> is negative. In that
    case we can cut some history from the shallow clone. This operation
    (and --depth=<shorter depth>) does not require interaction with remote
    side (and more complicated to implement as a result).
    
    Helped-by: default avatarDuy Nguyen <pclouds@gmail.com>
    Helped-by: default avatarEric Sunshine <sunshine@sunshineco.com>
    Helped-by: default avatarJunio C Hamano <gitster@pobox.com>
    Signed-off-by: default avatarDongcan Jiang <dongcan.jiang@gmail.com>
    Signed-off-by: default avatarNguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    cccf74e2