Skip to content
  • Paul Tan's avatar
    builtin-am: implement skeletal builtin am · 73c2779f
    Paul Tan authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    For the purpose of rewriting git-am.sh into a C builtin, implement a
    skeletal builtin/am.c that redirects to $GIT_EXEC_PATH/git-am if the
    environment variable _GIT_USE_BUILTIN_AM is not defined. Since in the
    Makefile git-am.sh takes precedence over builtin/am.c,
    $GIT_EXEC_PATH/git-am will contain the shell script git-am.sh, and thus
    this allows us to fall back on the functional git-am.sh when running the
    test suite for tests that depend on a working git-am implementation.
    
    Since git-am.sh cannot handle any environment modifications by
    setup_git_directory(), "am" is declared with no setup flags in git.c. On
    the other hand, to re-implement git-am.sh in builtin/am.c, we need to
    run all the git dir and work tree setup logic that git.c typically does
    for us. As such, we work around this temporarily by copying the logic in
    git.c's run_builtin(), which is roughly:
    
    	prefix = setup_git_directory();
    	trace_repo_setup(prefix);
    	setup_work_tree();
    
    This redirection should be removed when all the features of git-am.sh
    have been re-implemented in builtin/am.c.
    
    Helped-by: default avatarJunio C Hamano <gitster@pobox.com>
    Signed-off-by: default avatarPaul Tan <pyokagan@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    73c2779f