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

[PATCH v4 00/44] Make git-am a builtin

From
Paul Tan <pyokagan@gmail.com>
Date
Jun 28, 2015, 14:05 UTC
Message-ID
<1435500366-31700-1-git-send-email-pyokagan@gmail.com>
This patch series depends on pt/pull-builtin.

This is a re-roll of [WIP v3]. This patch series is now out of WIP, as the git-am feature set is complete. I've marked out some features which lack tests though, which I'm working on fixing.

Thanks Junio, Stefan, Johannes for the reviews last round.
Also, v4, with 44 patches ;-)
Previous versions:

[WIP v1] http://thread.gmane.org/gmane.comp.version-control.git/270048 [WIP v2] http://thread.gmane.org/gmane.comp.version-control.git/271381 [WIP v3] http://thread.gmane.org/gmane.comp.version-control.git/271967

git-am is a commonly used command for applying a series of patches from a mailbox to the current branch. Currently, it is implemented by the shell script git-am.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 WIP patch series rewrites git-am.sh into optimized C builtin/am.c, and is part of my GSoC project to rewrite git-pull and git-am into C builtins[1].

[1] https://gist.github.com/pyokagan/1b7b0d1f4dab6ba3cef1
Paul Tan (44):
  wrapper: implement xopen()
  wrapper: implement xfopen()
  builtin-am: implement skeletal builtin am
  builtin-am: implement patch queue mechanism
  builtin-am: split out mbox/maildir patches with git-mailsplit
  builtin-am: auto-detect mbox patches
  builtin-am: extract patch and commit info with git-mailinfo
  builtin-am: apply patch with git-apply
  builtin-am: implement committing applied patch
  builtin-am: refuse to apply patches if index is dirty
  builtin-am: implement --resolved/--continue
  builtin-am: implement --skip
  builtin-am: implement --abort
  builtin-am: reject patches when there's a session in progress
  builtin-am: implement -q/--quiet, GIT_QUIET
  builtin-am: exit with user friendly message on failure
  builtin-am: implement -s/--signoff
  cache-tree: introduce write_index_as_tree()
  builtin-am: implement --3way, am.threeway
  builtin-am: implement --rebasing mode
  builtin-am: bypass git-mailinfo when --rebasing
  builtin-am: handle stray state directory
  builtin-am: implement -u/--utf8
  builtin-am: implement -k/--keep, --keep-non-patch
  builtin-am: implement --[no-]message-id, am.messageid
  builtin-am: support --keep-cr, am.keepcr
  builtin-am: implement --[no-]scissors
  builtin-am: pass git-apply's options to git-apply
  builtin-am: implement --ignore-date
  builtin-am: implement --committer-date-is-author-date
  builtin-am: implement -S/--gpg-sign, commit.gpgsign
  builtin-am: invoke post-rewrite hook
  builtin-am: support automatic notes copying
  builtin-am: invoke applypatch-msg hook
  builtin-am: invoke pre-applypatch hook
  builtin-am: invoke post-applypatch hook
  builtin-am: rerere support
  builtin-am: support and auto-detect StGit patches
  builtin-am: support and auto-detect StGit series files
  builtin-am: support and auto-detect mercurial patches
  builtin-am: implement -i/--interactive
  builtin-am: implement legacy -b/--binary option
  builtin-am: check for valid committer ident
  builtin-am: remove redirection to git-am.sh
 Makefile                                |    2 +-
 builtin.h                               |    1 +
 builtin/am.c                            | 2335 +++++++++++++++++++++++++++++++
 cache-tree.c                            |   29 +-
 cache-tree.h                            |    1 +
 git-am.sh => contrib/examples/git-am.sh |    0
 git-compat-util.h                       |    2 +
 git.c                                   |    1 +
 wrapper.c                               |   43 +
 9 files changed, 2401 insertions(+), 13 deletions(-)
 create mode 100644 builtin/am.c
 rename git-am.sh => contrib/examples/git-am.sh (100%)
-- 
2.5.0.rc0.76.gb2c6e93
Next: Paul Tan
Message 1 of 74 in “Make git-am a builtin”
  1. 00/44 Make git-am a builtinPaul Tan, Jun 28, 2015
  2. 01/44 wrapper: implement xopen()Paul Tan, Jun 28, 2015
  3. Torsten BögershausenJun 29, 2015
  4. Stefan BellerJun 29, 2015
  5. Junio C HamanoJun 29, 2015
  6. Paul TanJul 1, 2015
  7. Paul TanJul 1, 2015
  8. 02/44 wrapper: implement xfopen()Paul Tan, Jun 28, 2015
  9. 03/44 builtin-am: implement skeletal builtin amPaul Tan, Jun 28, 2015
  10. 04/44 builtin-am: implement patch queue mechanismPaul Tan, Jun 28, 2015
  11. Stefan BellerJun 29, 2015
  12. Paul TanJul 7, 2015
  13. 05/44 builtin-am: split out mbox/maildir patches with git-mailsplitPaul Tan, Jun 28, 2015
  14. 06/44 builtin-am: auto-detect mbox patchesPaul Tan, Jun 28, 2015
  15. 07/44 builtin-am: extract patch and commit info with git-mailinfoPaul Tan, Jun 28, 2015
  16. 08/44 builtin-am: apply patch with git-applyPaul Tan, Jun 28, 2015
  17. 09/44 builtin-am: implement committing applied patchPaul Tan, Jun 28, 2015
  18. 10/44 builtin-am: refuse to apply patches if index is dirtyPaul Tan, Jun 28, 2015
  19. 11/44 builtin-am: implement --resolved/--continuePaul Tan, Jun 28, 2015
  20. 12/44 builtin-am: implement --skipPaul Tan, Jun 28, 2015
  21. 13/44 builtin-am: implement --abortPaul Tan, Jun 28, 2015
  22. 14/44 builtin-am: reject patches when there's a session in progressPaul Tan, Jun 28, 2015
  23. 15/44 builtin-am: implement -q/--quiet, GIT_QUIETPaul Tan, Jun 28, 2015
  24. 16/44 builtin-am: exit with user friendly message on failurePaul Tan, Jun 28, 2015
  25. 17/44 builtin-am: implement -s/--signoffPaul Tan, Jun 28, 2015
  26. 18/44 cache-tree: introduce write_index_as_tree()Paul Tan, Jun 28, 2015
  27. 19/44 builtin-am: implement --3way, am.threewayPaul Tan, Jun 28, 2015
  28. Stefan BellerJun 30, 2015
  29. 20/44 builtin-am: implement --rebasing modePaul Tan, Jun 28, 2015
  30. 21/44 builtin-am: bypass git-mailinfo when --rebasingPaul Tan, Jun 28, 2015
  31. 22/44 builtin-am: handle stray state directoryPaul Tan, Jun 28, 2015
  32. 23/44 builtin-am: implement -u/--utf8Paul Tan, Jun 28, 2015
  33. 24/44 builtin-am: implement -k/--keep, --keep-non-patchPaul Tan, Jun 28, 2015
  34. 25/44 builtin-am: implement --[no-]message-id, am.messageidPaul Tan, Jun 28, 2015
  35. 26/44 builtin-am: support --keep-cr, am.keepcrPaul Tan, Jun 28, 2015
  36. 27/44 builtin-am: implement --[no-]scissorsPaul Tan, Jun 28, 2015
  37. Paul TanJul 7, 2015
  38. 28/44 builtin-am: pass git-apply's options to git-applyPaul Tan, Jun 28, 2015
  39. Stefan BellerJun 29, 2015
  40. Paul TanJul 1, 2015
  41. Stefan BellerJul 1, 2015
  42. 29/44 builtin-am: implement --ignore-datePaul Tan, Jun 28, 2015
  43. 30/44 builtin-am: implement --committer-date-is-author-datePaul Tan, Jun 28, 2015
  44. 31/44 builtin-am: implement -S/--gpg-sign, commit.gpgsignPaul Tan, Jun 28, 2015
  45. Stefan BellerJun 29, 2015
  46. Paul TanJul 1, 2015
  47. Stefan BellerJul 1, 2015
  48. 32/44 builtin-am: invoke post-rewrite hookPaul Tan, Jun 28, 2015
  49. 33/44 builtin-am: support automatic notes copyingPaul Tan, Jun 28, 2015
  50. 34/44 builtin-am: invoke applypatch-msg hookPaul Tan, Jun 28, 2015
  51. 35/44 builtin-am: invoke pre-applypatch hookPaul Tan, Jun 28, 2015
  52. 36/44 builtin-am: invoke post-applypatch hookPaul Tan, Jun 28, 2015
  53. 37/44 builtin-am: rerere supportPaul Tan, Jun 28, 2015
  54. 38/44 builtin-am: support and auto-detect StGit patchesPaul Tan, Jun 28, 2015
  55. Stefan BellerJun 29, 2015
  56. Eric SunshineJun 29, 2015
  57. Junio C HamanoJun 29, 2015
  58. Paul TanJul 1, 2015
  59. 39/44 builtin-am: support and auto-detect StGit series filesPaul Tan, Jun 28, 2015
  60. 40/44 builtin-am: support and auto-detect mercurial patchesPaul Tan, Jun 28, 2015
  61. Stefan BellerJun 29, 2015
  62. Stefan BellerJun 29, 2015
  63. Paul TanJul 1, 2015
  64. Paul TanJul 1, 2015
  65. 41/44 builtin-am: implement -i/--interactivePaul Tan, Jun 28, 2015
  66. 42/44 builtin-am: implement legacy -b/--binary optionPaul Tan, Jun 28, 2015
  67. Stefan BellerJun 29, 2015
  68. 43/44 builtin-am: check for valid committer identPaul Tan, Jun 28, 2015
  69. Stefan BellerJun 29, 2015
  70. Paul TanJul 1, 2015
  71. 44/44 builtin-am: remove redirection to git-am.shPaul Tan, Jun 28, 2015
  72. Stefan BellerJun 29, 2015
  73. Stefan BellerJun 30, 2015
  74. Paul TanJul 14, 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.