git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 00/19] Make git-pull a builtin

From
Paul Tan <pyokagan@gmail.com>
Date
Jun 18, 2015, 10:53 UTC
Message-ID
<1434624852-6869-1-git-send-email-pyokagan@gmail.com>

This is a re-roll of [v3]. It squashes in Ramsay's patch "fix some sparse warnings", and fixes the use-before-free reported by Duy. Thanks a lot for dealing with my mess :-).

Other than that, there are no other changes as I'm working on the git-am side of things.

Previous versions:

[v1] http://thread.gmane.org/gmane.comp.version-control.git/269258 [v2] http://thread.gmane.org/gmane.comp.version-control.git/270639 [v3] http://thread.gmane.org/gmane.comp.version-control.git/271614

git-pull is a commonly executed command to check for new changes in the upstream repository and, if there are, fetch and integrate them into the current branch. Currently it is implemented by the shell script git-pull.sh. However, compared to C, shell scripts have certain deficiencies -- they need to spawn a lot of processes, introduce a lot of dependencies and cannot take advantage of git's internal caches.

This series rewrites git-pull.sh into a C builtin, thus improving its performance and portability. It is part of my GSoC project to rewrite git-pull and git-am into builtins[1].

[1] https://gist.github.com/pyokagan/1b7b0d1f4dab6ba3cef1
Paul Tan (19):
  parse-options-cb: implement parse_opt_passthru()
  parse-options-cb: implement parse_opt_passthru_argv()
  argv-array: implement argv_array_pushv()
  pull: implement skeletal builtin pull
  pull: implement fetch + merge
  pull: pass verbosity, --progress flags to fetch and merge
  pull: pass git-merge's options to git-merge
  pull: pass git-fetch's options to git-fetch
  pull: error on no merge candidates
  pull: support pull.ff config
  pull: check if in unresolved merge state
  pull: fast-forward working tree if head is updated
  pull: implement pulling into an unborn branch
  pull: set reflog message
  pull: teach git pull about --rebase
  pull: configure --rebase via branch.<name>.rebase or pull.rebase
  pull --rebase: exit early when the working directory is dirty
  pull --rebase: error on no merge candidate cases
  pull: remove redirection to git-pull.sh
 Documentation/technical/api-argv-array.txt    |   3 +
 Documentation/technical/api-parse-options.txt |  13 +
 Makefile                                      |   2 +-
 advice.c                                      |   8 +
 advice.h                                      |   1 +
 argv-array.c                                  |   6 +
 argv-array.h                                  |   1 +
 builtin.h                                     |   1 +
 builtin/pull.c                                | 882 ++++++++++++++++++++++++++
 git-pull.sh => contrib/examples/git-pull.sh   |   0
 git.c                                         |   1 +
 parse-options-cb.c                            |  69 ++
 parse-options.h                               |   6 +
 13 files changed, 992 insertions(+), 1 deletion(-)
 create mode 100644 builtin/pull.c
 rename git-pull.sh => contrib/examples/git-pull.sh (100%)
-- 
2.1.4
Next: Paul Tan
Message 1 of 22 in “Make git-pull a builtin”
  1. 00/19 Make git-pull a builtinPaul Tan, Jun 18, 2015
  2. 01/19 parse-options-cb: implement parse_opt_passthru()Paul Tan, Jun 18, 2015
  3. 02/19 parse-options-cb: implement parse_opt_passthru_argv()Paul Tan, Jun 18, 2015
  4. 03/19 argv-array: implement argv_array_pushv()Paul Tan, Jun 18, 2015
  5. 04/19 pull: implement skeletal builtin pullPaul Tan, Jun 18, 2015
  6. 05/19 pull: implement fetch + mergePaul Tan, Jun 18, 2015
  7. 06/19 pull: pass verbosity, --progress flags to fetch and mergePaul Tan, Jun 18, 2015
  8. 07/19 pull: pass git-merge's options to git-mergePaul Tan, Jun 18, 2015
  9. 08/19 pull: pass git-fetch's options to git-fetchPaul Tan, Jun 18, 2015
  10. 09/19 pull: error on no merge candidatesPaul Tan, Jun 18, 2015
  11. 10/19 pull: support pull.ff configPaul Tan, Jun 18, 2015
  12. 11/19 pull: check if in unresolved merge statePaul Tan, Jun 18, 2015
  13. 12/19 pull: fast-forward working tree if head is updatedPaul Tan, Jun 18, 2015
  14. 13/19 pull: implement pulling into an unborn branchPaul Tan, Jun 18, 2015
  15. 14/19 pull: set reflog messagePaul Tan, Jun 18, 2015
  16. 15/19 pull: teach git pull about --rebasePaul Tan, Jun 18, 2015
  17. 16/19 pull: configure --rebase via branch.<name>.rebase or pull.rebasePaul Tan, Jun 18, 2015
  18. 17/19 pull --rebase: exit early when the working directory is dirtyPaul Tan, Jun 18, 2015
  19. 18/19 pull --rebase: error on no merge candidate casesPaul Tan, Jun 18, 2015
  20. 19/19 pull: remove redirection to git-pull.shPaul Tan, Jun 18, 2015
  21. Junio C HamanoJun 18, 2015
  22. Paul TanJun 19, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.