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

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

From
Paul Tan <pyokagan@gmail.com>
Date
Jun 3, 2015, 06:48 UTC
Message-ID
<1433314143-4478-1-git-send-email-pyokagan@gmail.com>

This is a re-roll of [v1]. Thanks Johannes, Stefan and Junio for the reviews last round.

Previous versions:
[v1] http://thread.gmane.org/gmane.comp.version-control.git/269258

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_pass_strbuf()
  parse-options-cb: implement parse_opt_pass_argv_array()
  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 +
 Makefile                                    |   2 +-
 advice.c                                    |   8 +
 advice.h                                    |   1 +
 argv-array.c                                |   6 +
 argv-array.h                                |   1 +
 builtin.h                                   |   1 +
 builtin/pull.c                              | 888 ++++++++++++++++++++++++++++
 git-pull.sh => contrib/examples/git-pull.sh |   0
 git.c                                       |   1 +
 parse-options-cb.c                          |  61 ++
 parse-options.h                             |   2 +
 12 files changed, 973 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 48 in “Make git-pull a builtin”
  1. 00/19 Make git-pull a builtinPaul Tan, Jun 3, 2015
  2. 01/19 parse-options-cb: implement parse_opt_pass_strbuf()Paul Tan, Jun 3, 2015
  3. Junio C HamanoJun 9, 2015
  4. 02/19 parse-options-cb: implement parse_opt_pass_argv_array()Paul Tan, Jun 3, 2015
  5. Stefan BellerJun 3, 2015
  6. Junio C HamanoJun 9, 2015
  7. Paul TanJun 10, 2015
  8. Junio C HamanoJun 10, 2015
  9. 03/19 argv-array: implement argv_array_pushv()Paul Tan, Jun 3, 2015
  10. 04/19 pull: implement skeletal builtin pullPaul Tan, Jun 3, 2015
  11. Junio C HamanoJun 10, 2015
  12. 05/19 pull: implement fetch + mergePaul Tan, Jun 3, 2015
  13. Junio C HamanoJun 9, 2015
  14. 06/19 pull: pass verbosity, --progress flags to fetch and mergePaul Tan, Jun 3, 2015
  15. Junio C HamanoJun 9, 2015
  16. 07/19 pull: pass git-merge's options to git-mergePaul Tan, Jun 3, 2015
  17. 08/19 pull: pass git-fetch's options to git-fetchPaul Tan, Jun 3, 2015
  18. Stefan BellerJun 3, 2015
  19. 09/19 pull: error on no merge candidatesPaul Tan, Jun 3, 2015
  20. Junio C HamanoJun 9, 2015
  21. Paul TanJun 13, 2015
  22. 10/19 pull: support pull.ff configPaul Tan, Jun 3, 2015
  23. Junio C HamanoJun 9, 2015
  24. 11/19 pull: check if in unresolved merge statePaul Tan, Jun 3, 2015
  25. Junio C HamanoJun 10, 2015
  26. Junio C HamanoJun 10, 2015
  27. Paul TanJun 10, 2015
  28. Junio C HamanoJun 10, 2015
  29. Paul TanJun 14, 2015
  30. 12/19 pull: fast-forward working tree if head is updatedPaul Tan, Jun 3, 2015
  31. 13/19 pull: implement pulling into an unborn branchPaul Tan, Jun 3, 2015
  32. Junio C HamanoJun 10, 2015
  33. 14/19 pull: set reflog messagePaul Tan, Jun 3, 2015
  34. 15/19 pull: teach git pull about --rebasePaul Tan, Jun 3, 2015
  35. Junio C HamanoJun 10, 2015
  36. Paul TanJun 10, 2015
  37. Junio C HamanoJun 10, 2015
  38. Paul TanJun 10, 2015
  39. Junio C HamanoJun 10, 2015
  40. Junio C HamanoJun 10, 2015
  41. 16/19 pull: configure --rebase via branch.<name>.rebase or pull.rebasePaul Tan, Jun 3, 2015
  42. 17/19 pull --rebase: exit early when the working directory is dirtyPaul Tan, Jun 3, 2015
  43. Kevin DaudtJun 3, 2015
  44. Kevin DaudtJun 10, 2015
  45. 18/19 pull --rebase: error on no merge candidate casesPaul Tan, Jun 3, 2015
  46. Stefan BellerJun 3, 2015
  47. 19/19 pull: remove redirection to git-pull.shPaul Tan, Jun 3, 2015
  48. Stefan BellerJun 3, 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.