{"thread":{"id":"22715","subject":"[RFD] Deepen the git directory structure a bit.","startedAt":"2010-02-18T18:36:29Z","lastAt":"2010-02-27T01:28:51Z","messageCount":11,"participants":["Linus Torvalds","Junio C Hamano","Avery Pennarun","Christian MICHON","Pavan Kumar Sunkara","Fabian Kössel"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"134989","messageId":"alpine.LFD.2.00.1002181010590.4141@localhost.localdomain","threadId":"22715","inReplyTo":null,"subject":"[RFD] Deepen the git directory structure a bit.","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2010-02-18T18:36:29Z","receivedAt":"2010-02-18T18:36:29Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\nOk, this is just a request-for-discussion. I'm trying out a patch like \nthis, and I think it's a step in the right direction. The git directory \nstructure is _very_ flat, and currently in a fully built git tree, the \ntop-level directory has something like 750 files in it.\n\nAfter this, it still has a ton of files, but it has shrunk to ~575 files \ninstead, and at least for my (admittedly somewhat odd) setup, that \nactually matters for auto-completion etc.\n\nI think this coul probably be done differently (I'm not proud of that ugly \n'-I. -Ibuiltin' addition to the CFLAGS, for example), and I think there \nare _other_ things we could also try to do to move files into \nsubdirectories, but this was a fairly easy thing to basically script.\n\nWhat do people think?\n\n\t\t\tLinus\n\n---\nFrom: Linus Torvalds <torvalds@linux-foundation.org>\nDate: Thu, 18 Feb 2010 10:11:32 -0800\nSubject: [PATCH] Move 'builtin-*' into a 'builtin/' subdirectory\n\nThis shrinks the top-level directory a bit, and makes it much more\npleasant to use auto-completion on the thing. Instead of\n\n\t[torvalds@nehalem git]$ em buil<tab>\n\tDisplay all 180 possibilities? (y or n)\n\t[torvalds@nehalem git]$ em builtin-sh\n\tbuiltin-shortlog.c     builtin-show-branch.c  builtin-show-ref.c\n\tbuiltin-shortlog.o     builtin-show-branch.o  builtin-show-ref.o\n\t[torvalds@nehalem git]$ em builtin-shor<tab>\n\tbuiltin-shortlog.c  builtin-shortlog.o\n\t[torvalds@nehalem git]$ em builtin-shortlog.c\n\nyou get\n\n\t[torvalds@nehalem git]$ em buil<tab>\t\t[type]\n\t[torvalds@nehalem git]$ em builtin/\t\t[auto-completes to]\n\t[torvalds@nehalem git]$ em builtin/sh<tab>\t[type]\n\tshortlog.c     shortlog.o     show-branch.c  show-branch.o  show-ref.c     show-ref.o\n\t[torvalds@nehalem git]$ em builtin/sho\t\t[auto-completes to]\n\t[torvalds@nehalem git]$ em builtin/shor<tab>\t[type]\n\tshortlog.c  shortlog.o\n\t[torvalds@nehalem git]$ em builtin/shortlog.c\n\nwhich doesn't seem all that different, but not having that annoying\nbreak in \"Display all 180 possibilities?\" is quite a relief.\n\nNOTE! If you do this in a clean tree (no object files etc), or using an\neditor that has auto-completion rules that ignores '*.o' files, you\nwon't see that annoying 'Display all 180 possibilities?' message - it\nwill just show the choices instead.  I think bash has some cut-off\naround 100 choices or something.\n\nSo the reason I see this is that I'm using an odd editory, and thus\ndon't have the rules to cut down on auto-completion.  But you can\nsimulate that by using 'ls' instead, or something similar. And you can \ntell that there are fewer files in the top directory.\n\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>\n---\n Makefile                                           |  194 ++++++++++----------\n builtin-add.c => builtin/add.c                     |    0\n builtin-annotate.c => builtin/annotate.c           |    0\n builtin-apply.c => builtin/apply.c                 |    0\n builtin-archive.c => builtin/archive.c             |    0\n .../bisect--helper.c                               |    0\n builtin-blame.c => builtin/blame.c                 |    0\n builtin-branch.c => builtin/branch.c               |    0\n builtin.h => builtin/builtin.h                     |    0\n builtin-bundle.c => builtin/bundle.c               |    0\n builtin-cat-file.c => builtin/cat-file.c           |    0\n builtin-check-attr.c => builtin/check-attr.c       |    0\n .../check-ref-format.c                             |    0\n .../checkout-index.c                               |    0\n builtin-checkout.c => builtin/checkout.c           |    0\n builtin-clean.c => builtin/clean.c                 |    0\n builtin-clone.c => builtin/clone.c                 |    0\n builtin-commit-tree.c => builtin/commit-tree.c     |    0\n builtin-commit.c => builtin/commit.c               |    0\n builtin-config.c => builtin/config.c               |    0\n builtin-count-objects.c => builtin/count-objects.c |    0\n builtin-describe.c => builtin/describe.c           |    0\n builtin-diff-files.c => builtin/diff-files.c       |    0\n builtin-diff-index.c => builtin/diff-index.c       |    0\n builtin-diff-tree.c => builtin/diff-tree.c         |    0\n builtin-diff.c => builtin/diff.c                   |    0\n builtin-fast-export.c => builtin/fast-export.c     |    0\n builtin-fetch-pack.c => builtin/fetch-pack.c       |    0\n builtin-fetch.c => builtin/fetch.c                 |    0\n builtin-fmt-merge-msg.c => builtin/fmt-merge-msg.c |    0\n builtin-for-each-ref.c => builtin/for-each-ref.c   |    0\n builtin-fsck.c => builtin/fsck.c                   |    0\n builtin-gc.c => builtin/gc.c                       |    0\n builtin-grep.c => builtin/grep.c                   |    0\n builtin-hash-object.c => builtin/hash-object.c     |    0\n builtin-help.c => builtin/help.c                   |    0\n builtin-index-pack.c => builtin/index-pack.c       |    0\n builtin-init-db.c => builtin/init-db.c             |    0\n builtin-log.c => builtin/log.c                     |    0\n builtin-ls-files.c => builtin/ls-files.c           |    0\n builtin-ls-remote.c => builtin/ls-remote.c         |    0\n builtin-ls-tree.c => builtin/ls-tree.c             |    0\n builtin-mailinfo.c => builtin/mailinfo.c           |    0\n builtin-mailsplit.c => builtin/mailsplit.c         |    0\n builtin-merge-base.c => builtin/merge-base.c       |    0\n builtin-merge-file.c => builtin/merge-file.c       |    0\n builtin-merge-index.c => builtin/merge-index.c     |    0\n builtin-merge-ours.c => builtin/merge-ours.c       |    0\n .../merge-recursive.c                              |    0\n builtin-merge-tree.c => builtin/merge-tree.c       |    0\n builtin-merge.c => builtin/merge.c                 |    0\n builtin-mktag.c => builtin/mktag.c                 |    0\n builtin-mktree.c => builtin/mktree.c               |    0\n builtin-mv.c => builtin/mv.c                       |    0\n builtin-name-rev.c => builtin/name-rev.c           |    0\n builtin-pack-objects.c => builtin/pack-objects.c   |    0\n .../pack-redundant.c                               |    0\n builtin-pack-refs.c => builtin/pack-refs.c         |    0\n builtin-patch-id.c => builtin/patch-id.c           |    0\n builtin-prune-packed.c => builtin/prune-packed.c   |    0\n builtin-prune.c => builtin/prune.c                 |    0\n builtin-push.c => builtin/push.c                   |    0\n builtin-read-tree.c => builtin/read-tree.c         |    0\n builtin-receive-pack.c => builtin/receive-pack.c   |    0\n builtin-reflog.c => builtin/reflog.c               |    0\n builtin-remote.c => builtin/remote.c               |    0\n builtin-replace.c => builtin/replace.c             |    0\n builtin-rerere.c => builtin/rerere.c               |    0\n builtin-reset.c => builtin/reset.c                 |    0\n builtin-rev-list.c => builtin/rev-list.c           |    0\n builtin-rev-parse.c => builtin/rev-parse.c         |    0\n builtin-revert.c => builtin/revert.c               |    0\n builtin-rm.c => builtin/rm.c                       |    0\n builtin-send-pack.c => builtin/send-pack.c         |    0\n builtin-shortlog.c => builtin/shortlog.c           |    0\n builtin-show-branch.c => builtin/show-branch.c     |    0\n builtin-show-ref.c => builtin/show-ref.c           |    0\n builtin-stripspace.c => builtin/stripspace.c       |    0\n builtin-symbolic-ref.c => builtin/symbolic-ref.c   |    0\n builtin-tag.c => builtin/tag.c                     |    0\n builtin-tar-tree.c => builtin/tar-tree.c           |    0\n builtin-unpack-file.c => builtin/unpack-file.c     |    0\n .../unpack-objects.c                               |    0\n builtin-update-index.c => builtin/update-index.c   |    0\n builtin-update-ref.c => builtin/update-ref.c       |    0\n .../update-server-info.c                           |    0\n .../upload-archive.c                               |    0\n builtin-var.c => builtin/var.c                     |    0\n builtin-verify-pack.c => builtin/verify-pack.c     |    0\n builtin-verify-tag.c => builtin/verify-tag.c       |    0\n builtin-write-tree.c => builtin/write-tree.c       |    0\n 91 files changed, 97 insertions(+), 97 deletions(-)\n rename builtin-add.c => builtin/add.c (100%)\n rename builtin-annotate.c => builtin/annotate.c (100%)\n rename builtin-apply.c => builtin/apply.c (100%)\n rename builtin-archive.c => builtin/archive.c (100%)\n rename builtin-bisect--helper.c => builtin/bisect--helper.c (100%)\n rename builtin-blame.c => builtin/blame.c (100%)\n rename builtin-branch.c => builtin/branch.c (100%)\n rename builtin.h => builtin/builtin.h (100%)\n rename builtin-bundle.c => builtin/bundle.c (100%)\n rename builtin-cat-file.c => builtin/cat-file.c (100%)\n rename builtin-check-attr.c => builtin/check-attr.c (100%)\n rename builtin-check-ref-format.c => builtin/check-ref-format.c (100%)\n rename builtin-checkout-index.c => builtin/checkout-index.c (100%)\n rename builtin-checkout.c => builtin/checkout.c (100%)\n rename builtin-clean.c => builtin/clean.c (100%)\n rename builtin-clone.c => builtin/clone.c (100%)\n rename builtin-commit-tree.c => builtin/commit-tree.c (100%)\n rename builtin-commit.c => builtin/commit.c (100%)\n rename builtin-config.c => builtin/config.c (100%)\n rename builtin-count-objects.c => builtin/count-objects.c (100%)\n rename builtin-describe.c => builtin/describe.c (100%)\n rename builtin-diff-files.c => builtin/diff-files.c (100%)\n rename builtin-diff-index.c => builtin/diff-index.c (100%)\n rename builtin-diff-tree.c => builtin/diff-tree.c (100%)\n rename builtin-diff.c => builtin/diff.c (100%)\n rename builtin-fast-export.c => builtin/fast-export.c (100%)\n rename builtin-fetch-pack.c => builtin/fetch-pack.c (100%)\n rename builtin-fetch.c => builtin/fetch.c (100%)\n rename builtin-fmt-merge-msg.c => builtin/fmt-merge-msg.c (100%)\n rename builtin-for-each-ref.c => builtin/for-each-ref.c (100%)\n rename builtin-fsck.c => builtin/fsck.c (100%)\n rename builtin-gc.c => builtin/gc.c (100%)\n rename builtin-grep.c => builtin/grep.c (100%)\n rename builtin-hash-object.c => builtin/hash-object.c (100%)\n rename builtin-help.c => builtin/help.c (100%)\n rename builtin-index-pack.c => builtin/index-pack.c (100%)\n rename builtin-init-db.c => builtin/init-db.c (100%)\n rename builtin-log.c => builtin/log.c (100%)\n rename builtin-ls-files.c => builtin/ls-files.c (100%)\n rename builtin-ls-remote.c => builtin/ls-remote.c (100%)\n rename builtin-ls-tree.c => builtin/ls-tree.c (100%)\n rename builtin-mailinfo.c => builtin/mailinfo.c (100%)\n rename builtin-mailsplit.c => builtin/mailsplit.c (100%)\n rename builtin-merge-base.c => builtin/merge-base.c (100%)\n rename builtin-merge-file.c => builtin/merge-file.c (100%)\n rename builtin-merge-index.c => builtin/merge-index.c (100%)\n rename builtin-merge-ours.c => builtin/merge-ours.c (100%)\n rename builtin-merge-recursive.c => builtin/merge-recursive.c (100%)\n rename builtin-merge-tree.c => builtin/merge-tree.c (100%)\n rename builtin-merge.c => builtin/merge.c (100%)\n rename builtin-mktag.c => builtin/mktag.c (100%)\n rename builtin-mktree.c => builtin/mktree.c (100%)\n rename builtin-mv.c => builtin/mv.c (100%)\n rename builtin-name-rev.c => builtin/name-rev.c (100%)\n rename builtin-pack-objects.c => builtin/pack-objects.c (100%)\n rename builtin-pack-redundant.c => builtin/pack-redundant.c (100%)\n rename builtin-pack-refs.c => builtin/pack-refs.c (100%)\n rename builtin-patch-id.c => builtin/patch-id.c (100%)\n rename builtin-prune-packed.c => builtin/prune-packed.c (100%)\n rename builtin-prune.c => builtin/prune.c (100%)\n rename builtin-push.c => builtin/push.c (100%)\n rename builtin-read-tree.c => builtin/read-tree.c (100%)\n rename builtin-receive-pack.c => builtin/receive-pack.c (100%)\n rename builtin-reflog.c => builtin/reflog.c (100%)\n rename builtin-remote.c => builtin/remote.c (100%)\n rename builtin-replace.c => builtin/replace.c (100%)\n rename builtin-rerere.c => builtin/rerere.c (100%)\n rename builtin-reset.c => builtin/reset.c (100%)\n rename builtin-rev-list.c => builtin/rev-list.c (100%)\n rename builtin-rev-parse.c => builtin/rev-parse.c (100%)\n rename builtin-revert.c => builtin/revert.c (100%)\n rename builtin-rm.c => builtin/rm.c (100%)\n rename builtin-send-pack.c => builtin/send-pack.c (100%)\n rename builtin-shortlog.c => builtin/shortlog.c (100%)\n rename builtin-show-branch.c => builtin/show-branch.c (100%)\n rename builtin-show-ref.c => builtin/show-ref.c (100%)\n rename builtin-stripspace.c => builtin/stripspace.c (100%)\n rename builtin-symbolic-ref.c => builtin/symbolic-ref.c (100%)\n rename builtin-tag.c => builtin/tag.c (100%)\n rename builtin-tar-tree.c => builtin/tar-tree.c (100%)\n rename builtin-unpack-file.c => builtin/unpack-file.c (100%)\n rename builtin-unpack-objects.c => builtin/unpack-objects.c (100%)\n rename builtin-update-index.c => builtin/update-index.c (100%)\n rename builtin-update-ref.c => builtin/update-ref.c (100%)\n rename builtin-update-server-info.c => builtin/update-server-info.c (100%)\n rename builtin-upload-archive.c => builtin/upload-archive.c (100%)\n rename builtin-var.c => builtin/var.c (100%)\n rename builtin-verify-pack.c => builtin/verify-pack.c (100%)\n rename builtin-verify-tag.c => builtin/verify-tag.c (100%)\n rename builtin-write-tree.c => builtin/write-tree.c (100%)\n\ndiff --git a/Makefile b/Makefile\nindex 7bf2fca..f023f9b 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -301,7 +301,7 @@ SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__\n # Those must not be GNU-specific; they are shared with perl/ which may\n # be built by a different compiler. (Note that this is an artifact now\n # but it still might be nice to keep that distinction.)\n-BASIC_CFLAGS =\n+BASIC_CFLAGS = -I. -Ibuiltin\n BASIC_LDFLAGS =\n \n # Guard against environment variables\n@@ -368,8 +368,8 @@ PROGRAMS += git-upload-pack$X\n PROGRAMS += git-http-backend$X\n \n # List built-in command $C whose implementation cmd_$C() is not in\n-# builtin-$C.o but is linked in as part of some other command.\n-BUILT_INS += $(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))\n+# builtin/$C.o but is linked in as part of some other command.\n+BUILT_INS += $(patsubst builtin/%.o,git-%$X,$(BUILTIN_OBJS))\n \n BUILT_INS += git-cherry$X\n BUILT_INS += git-cherry-pick$X\n@@ -422,7 +422,7 @@ LIB_H += advice.h\n LIB_H += archive.h\n LIB_H += attr.h\n LIB_H += blob.h\n-LIB_H += builtin.h\n+LIB_H += builtin/builtin.h\n LIB_H += cache.h\n LIB_H += cache-tree.h\n LIB_H += commit.h\n@@ -592,95 +592,95 @@ LIB_OBJS += ws.o\n LIB_OBJS += wt-status.o\n LIB_OBJS += xdiff-interface.o\n \n-BUILTIN_OBJS += builtin-add.o\n-BUILTIN_OBJS += builtin-annotate.o\n-BUILTIN_OBJS += builtin-apply.o\n-BUILTIN_OBJS += builtin-archive.o\n-BUILTIN_OBJS += builtin-bisect--helper.o\n-BUILTIN_OBJS += builtin-blame.o\n-BUILTIN_OBJS += builtin-branch.o\n-BUILTIN_OBJS += builtin-bundle.o\n-BUILTIN_OBJS += builtin-cat-file.o\n-BUILTIN_OBJS += builtin-check-attr.o\n-BUILTIN_OBJS += builtin-check-ref-format.o\n-BUILTIN_OBJS += builtin-checkout-index.o\n-BUILTIN_OBJS += builtin-checkout.o\n-BUILTIN_OBJS += builtin-clean.o\n-BUILTIN_OBJS += builtin-clone.o\n-BUILTIN_OBJS += builtin-commit-tree.o\n-BUILTIN_OBJS += builtin-commit.o\n-BUILTIN_OBJS += builtin-config.o\n-BUILTIN_OBJS += builtin-count-objects.o\n-BUILTIN_OBJS += builtin-describe.o\n-BUILTIN_OBJS += builtin-diff-files.o\n-BUILTIN_OBJS += builtin-diff-index.o\n-BUILTIN_OBJS += builtin-diff-tree.o\n-BUILTIN_OBJS += builtin-diff.o\n-BUILTIN_OBJS += builtin-fast-export.o\n-BUILTIN_OBJS += builtin-fetch-pack.o\n-BUILTIN_OBJS += builtin-fetch.o\n-BUILTIN_OBJS += builtin-fmt-merge-msg.o\n-BUILTIN_OBJS += builtin-for-each-ref.o\n-BUILTIN_OBJS += builtin-fsck.o\n-BUILTIN_OBJS += builtin-gc.o\n-BUILTIN_OBJS += builtin-grep.o\n-BUILTIN_OBJS += builtin-hash-object.o\n-BUILTIN_OBJS += builtin-help.o\n-BUILTIN_OBJS += builtin-index-pack.o\n-BUILTIN_OBJS += builtin-init-db.o\n-BUILTIN_OBJS += builtin-log.o\n-BUILTIN_OBJS += builtin-ls-files.o\n-BUILTIN_OBJS += builtin-ls-remote.o\n-BUILTIN_OBJS += builtin-ls-tree.o\n-BUILTIN_OBJS += builtin-mailinfo.o\n-BUILTIN_OBJS += builtin-mailsplit.o\n-BUILTIN_OBJS += builtin-merge.o\n-BUILTIN_OBJS += builtin-merge-base.o\n-BUILTIN_OBJS += builtin-merge-file.o\n-BUILTIN_OBJS += builtin-merge-index.o\n-BUILTIN_OBJS += builtin-merge-ours.o\n-BUILTIN_OBJS += builtin-merge-recursive.o\n-BUILTIN_OBJS += builtin-merge-tree.o\n-BUILTIN_OBJS += builtin-mktag.o\n-BUILTIN_OBJS += builtin-mktree.o\n-BUILTIN_OBJS += builtin-mv.o\n-BUILTIN_OBJS += builtin-name-rev.o\n-BUILTIN_OBJS += builtin-pack-objects.o\n-BUILTIN_OBJS += builtin-pack-redundant.o\n-BUILTIN_OBJS += builtin-pack-refs.o\n-BUILTIN_OBJS += builtin-patch-id.o\n-BUILTIN_OBJS += builtin-prune-packed.o\n-BUILTIN_OBJS += builtin-prune.o\n-BUILTIN_OBJS += builtin-push.o\n-BUILTIN_OBJS += builtin-read-tree.o\n-BUILTIN_OBJS += builtin-receive-pack.o\n-BUILTIN_OBJS += builtin-reflog.o\n-BUILTIN_OBJS += builtin-remote.o\n-BUILTIN_OBJS += builtin-replace.o\n-BUILTIN_OBJS += builtin-rerere.o\n-BUILTIN_OBJS += builtin-reset.o\n-BUILTIN_OBJS += builtin-rev-list.o\n-BUILTIN_OBJS += builtin-rev-parse.o\n-BUILTIN_OBJS += builtin-revert.o\n-BUILTIN_OBJS += builtin-rm.o\n-BUILTIN_OBJS += builtin-send-pack.o\n-BUILTIN_OBJS += builtin-shortlog.o\n-BUILTIN_OBJS += builtin-show-branch.o\n-BUILTIN_OBJS += builtin-show-ref.o\n-BUILTIN_OBJS += builtin-stripspace.o\n-BUILTIN_OBJS += builtin-symbolic-ref.o\n-BUILTIN_OBJS += builtin-tag.o\n-BUILTIN_OBJS += builtin-tar-tree.o\n-BUILTIN_OBJS += builtin-unpack-file.o\n-BUILTIN_OBJS += builtin-unpack-objects.o\n-BUILTIN_OBJS += builtin-update-index.o\n-BUILTIN_OBJS += builtin-update-ref.o\n-BUILTIN_OBJS += builtin-update-server-info.o\n-BUILTIN_OBJS += builtin-upload-archive.o\n-BUILTIN_OBJS += builtin-var.o\n-BUILTIN_OBJS += builtin-verify-pack.o\n-BUILTIN_OBJS += builtin-verify-tag.o\n-BUILTIN_OBJS += builtin-write-tree.o\n+BUILTIN_OBJS += builtin/add.o\n+BUILTIN_OBJS += builtin/annotate.o\n+BUILTIN_OBJS += builtin/apply.o\n+BUILTIN_OBJS += builtin/archive.o\n+BUILTIN_OBJS += builtin/bisect--helper.o\n+BUILTIN_OBJS += builtin/blame.o\n+BUILTIN_OBJS += builtin/branch.o\n+BUILTIN_OBJS += builtin/bundle.o\n+BUILTIN_OBJS += builtin/cat-file.o\n+BUILTIN_OBJS += builtin/check-attr.o\n+BUILTIN_OBJS += builtin/check-ref-format.o\n+BUILTIN_OBJS += builtin/checkout-index.o\n+BUILTIN_OBJS += builtin/checkout.o\n+BUILTIN_OBJS += builtin/clean.o\n+BUILTIN_OBJS += builtin/clone.o\n+BUILTIN_OBJS += builtin/commit-tree.o\n+BUILTIN_OBJS += builtin/commit.o\n+BUILTIN_OBJS += builtin/config.o\n+BUILTIN_OBJS += builtin/count-objects.o\n+BUILTIN_OBJS += builtin/describe.o\n+BUILTIN_OBJS += builtin/diff-files.o\n+BUILTIN_OBJS += builtin/diff-index.o\n+BUILTIN_OBJS += builtin/diff-tree.o\n+BUILTIN_OBJS += builtin/diff.o\n+BUILTIN_OBJS += builtin/fast-export.o\n+BUILTIN_OBJS += builtin/fetch-pack.o\n+BUILTIN_OBJS += builtin/fetch.o\n+BUILTIN_OBJS += builtin/fmt-merge-msg.o\n+BUILTIN_OBJS += builtin/for-each-ref.o\n+BUILTIN_OBJS += builtin/fsck.o\n+BUILTIN_OBJS += builtin/gc.o\n+BUILTIN_OBJS += builtin/grep.o\n+BUILTIN_OBJS += builtin/hash-object.o\n+BUILTIN_OBJS += builtin/help.o\n+BUILTIN_OBJS += builtin/index-pack.o\n+BUILTIN_OBJS += builtin/init-db.o\n+BUILTIN_OBJS += builtin/log.o\n+BUILTIN_OBJS += builtin/ls-files.o\n+BUILTIN_OBJS += builtin/ls-remote.o\n+BUILTIN_OBJS += builtin/ls-tree.o\n+BUILTIN_OBJS += builtin/mailinfo.o\n+BUILTIN_OBJS += builtin/mailsplit.o\n+BUILTIN_OBJS += builtin/merge.o\n+BUILTIN_OBJS += builtin/merge-base.o\n+BUILTIN_OBJS += builtin/merge-file.o\n+BUILTIN_OBJS += builtin/merge-index.o\n+BUILTIN_OBJS += builtin/merge-ours.o\n+BUILTIN_OBJS += builtin/merge-recursive.o\n+BUILTIN_OBJS += builtin/merge-tree.o\n+BUILTIN_OBJS += builtin/mktag.o\n+BUILTIN_OBJS += builtin/mktree.o\n+BUILTIN_OBJS += builtin/mv.o\n+BUILTIN_OBJS += builtin/name-rev.o\n+BUILTIN_OBJS += builtin/pack-objects.o\n+BUILTIN_OBJS += builtin/pack-redundant.o\n+BUILTIN_OBJS += builtin/pack-refs.o\n+BUILTIN_OBJS += builtin/patch-id.o\n+BUILTIN_OBJS += builtin/prune-packed.o\n+BUILTIN_OBJS += builtin/prune.o\n+BUILTIN_OBJS += builtin/push.o\n+BUILTIN_OBJS += builtin/read-tree.o\n+BUILTIN_OBJS += builtin/receive-pack.o\n+BUILTIN_OBJS += builtin/reflog.o\n+BUILTIN_OBJS += builtin/remote.o\n+BUILTIN_OBJS += builtin/replace.o\n+BUILTIN_OBJS += builtin/rerere.o\n+BUILTIN_OBJS += builtin/reset.o\n+BUILTIN_OBJS += builtin/rev-list.o\n+BUILTIN_OBJS += builtin/rev-parse.o\n+BUILTIN_OBJS += builtin/revert.o\n+BUILTIN_OBJS += builtin/rm.o\n+BUILTIN_OBJS += builtin/send-pack.o\n+BUILTIN_OBJS += builtin/shortlog.o\n+BUILTIN_OBJS += builtin/show-branch.o\n+BUILTIN_OBJS += builtin/show-ref.o\n+BUILTIN_OBJS += builtin/stripspace.o\n+BUILTIN_OBJS += builtin/symbolic-ref.o\n+BUILTIN_OBJS += builtin/tag.o\n+BUILTIN_OBJS += builtin/tar-tree.o\n+BUILTIN_OBJS += builtin/unpack-file.o\n+BUILTIN_OBJS += builtin/unpack-objects.o\n+BUILTIN_OBJS += builtin/update-index.o\n+BUILTIN_OBJS += builtin/update-ref.o\n+BUILTIN_OBJS += builtin/update-server-info.o\n+BUILTIN_OBJS += builtin/upload-archive.o\n+BUILTIN_OBJS += builtin/var.o\n+BUILTIN_OBJS += builtin/verify-pack.o\n+BUILTIN_OBJS += builtin/verify-tag.o\n+BUILTIN_OBJS += builtin/write-tree.o\n \n GITLIBS = $(LIB_FILE) $(XDIFF_LIB)\n EXTLIBS =\n@@ -1445,8 +1445,8 @@ git$X: git.o $(BUILTIN_OBJS) $(GITLIBS)\n \t$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \\\n \t\t$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)\n \n-builtin-help.o: common-cmds.h\n-builtin-help.s builtin-help.o: ALL_CFLAGS += \\\n+builtin/help.o: common-cmds.h\n+builtin/help.s builtin/help.o: ALL_CFLAGS += \\\n \t'-DGIT_HTML_PATH=\"$(htmldir_SQ)\"' \\\n \t'-DGIT_MAN_PATH=\"$(mandir_SQ)\"' \\\n \t'-DGIT_INFO_PATH=\"$(infodir_SQ)\"'\n@@ -1594,7 +1594,7 @@ exec_cmd.s exec_cmd.o: ALL_CFLAGS += \\\n \t'-DBINDIR=\"$(bindir_relative_SQ)\"' \\\n \t'-DPREFIX=\"$(prefix_SQ)\"'\n \n-builtin-init-db.s builtin-init-db.o: ALL_CFLAGS += \\\n+builtin/init-db.s builtin/init-db.o: ALL_CFLAGS += \\\n \t-DDEFAULT_GIT_TEMPLATE_DIR='\"$(template_dir_SQ)\"'\n \n config.s config.o: ALL_CFLAGS += -DETC_GITCONFIG='\"$(ETC_GITCONFIG_SQ)\"'\n@@ -1636,7 +1636,7 @@ $(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o $(GITLIBS)\n \n $(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)\n $(patsubst git-%$X,%.o,$(PROGRAMS)) git.o: $(LIB_H) $(wildcard */*.h)\n-builtin-revert.o wt-status.o: wt-status.h\n+builtin/revert.o wt-status.o: wt-status.h\n \n $(LIB_FILE): $(LIB_OBJS)\n \t$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)\ndiff --git a/builtin-add.c b/builtin/add.c\nsimilarity index 100%\nrename from builtin-add.c\nrename to builtin/add.c\ndiff --git a/builtin-annotate.c b/builtin/annotate.c\nsimilarity index 100%\nrename from builtin-annotate.c\nrename to builtin/annotate.c\ndiff --git a/builtin-apply.c b/builtin/apply.c\nsimilarity index 100%\nrename from builtin-apply.c\nrename to builtin/apply.c\ndiff --git a/builtin-archive.c b/builtin/archive.c\nsimilarity index 100%\nrename from builtin-archive.c\nrename to builtin/archive.c\ndiff --git a/builtin-bisect--helper.c b/builtin/bisect--helper.c\nsimilarity index 100%\nrename from builtin-bisect--helper.c\nrename to builtin/bisect--helper.c\ndiff --git a/builtin-blame.c b/builtin/blame.c\nsimilarity index 100%\nrename from builtin-blame.c\nrename to builtin/blame.c\ndiff --git a/builtin-branch.c b/builtin/branch.c\nsimilarity index 100%\nrename from builtin-branch.c\nrename to builtin/branch.c\ndiff --git a/builtin.h b/builtin/builtin.h\nsimilarity index 100%\nrename from builtin.h\nrename to builtin/builtin.h\ndiff --git a/builtin-bundle.c b/builtin/bundle.c\nsimilarity index 100%\nrename from builtin-bundle.c\nrename to builtin/bundle.c\ndiff --git a/builtin-cat-file.c b/builtin/cat-file.c\nsimilarity index 100%\nrename from builtin-cat-file.c\nrename to builtin/cat-file.c\ndiff --git a/builtin-check-attr.c b/builtin/check-attr.c\nsimilarity index 100%\nrename from builtin-check-attr.c\nrename to builtin/check-attr.c\ndiff --git a/builtin-check-ref-format.c b/builtin/check-ref-format.c\nsimilarity index 100%\nrename from builtin-check-ref-format.c\nrename to builtin/check-ref-format.c\ndiff --git a/builtin-checkout-index.c b/builtin/checkout-index.c\nsimilarity index 100%\nrename from builtin-checkout-index.c\nrename to builtin/checkout-index.c\ndiff --git a/builtin-checkout.c b/builtin/checkout.c\nsimilarity index 100%\nrename from builtin-checkout.c\nrename to builtin/checkout.c\ndiff --git a/builtin-clean.c b/builtin/clean.c\nsimilarity index 100%\nrename from builtin-clean.c\nrename to builtin/clean.c\ndiff --git a/builtin-clone.c b/builtin/clone.c\nsimilarity index 100%\nrename from builtin-clone.c\nrename to builtin/clone.c\ndiff --git a/builtin-commit-tree.c b/builtin/commit-tree.c\nsimilarity index 100%\nrename from builtin-commit-tree.c\nrename to builtin/commit-tree.c\ndiff --git a/builtin-commit.c b/builtin/commit.c\nsimilarity index 100%\nrename from builtin-commit.c\nrename to builtin/commit.c\ndiff --git a/builtin-config.c b/builtin/config.c\nsimilarity index 100%\nrename from builtin-config.c\nrename to builtin/config.c\ndiff --git a/builtin-count-objects.c b/builtin/count-objects.c\nsimilarity index 100%\nrename from builtin-count-objects.c\nrename to builtin/count-objects.c\ndiff --git a/builtin-describe.c b/builtin/describe.c\nsimilarity index 100%\nrename from builtin-describe.c\nrename to builtin/describe.c\ndiff --git a/builtin-diff-files.c b/builtin/diff-files.c\nsimilarity index 100%\nrename from builtin-diff-files.c\nrename to builtin/diff-files.c\ndiff --git a/builtin-diff-index.c b/builtin/diff-index.c\nsimilarity index 100%\nrename from builtin-diff-index.c\nrename to builtin/diff-index.c\ndiff --git a/builtin-diff-tree.c b/builtin/diff-tree.c\nsimilarity index 100%\nrename from builtin-diff-tree.c\nrename to builtin/diff-tree.c\ndiff --git a/builtin-diff.c b/builtin/diff.c\nsimilarity index 100%\nrename from builtin-diff.c\nrename to builtin/diff.c\ndiff --git a/builtin-fast-export.c b/builtin/fast-export.c\nsimilarity index 100%\nrename from builtin-fast-export.c\nrename to builtin/fast-export.c\ndiff --git a/builtin-fetch-pack.c b/builtin/fetch-pack.c\nsimilarity index 100%\nrename from builtin-fetch-pack.c\nrename to builtin/fetch-pack.c\ndiff --git a/builtin-fetch.c b/builtin/fetch.c\nsimilarity index 100%\nrename from builtin-fetch.c\nrename to builtin/fetch.c\ndiff --git a/builtin-fmt-merge-msg.c b/builtin/fmt-merge-msg.c\nsimilarity index 100%\nrename from builtin-fmt-merge-msg.c\nrename to builtin/fmt-merge-msg.c\ndiff --git a/builtin-for-each-ref.c b/builtin/for-each-ref.c\nsimilarity index 100%\nrename from builtin-for-each-ref.c\nrename to builtin/for-each-ref.c\ndiff --git a/builtin-fsck.c b/builtin/fsck.c\nsimilarity index 100%\nrename from builtin-fsck.c\nrename to builtin/fsck.c\ndiff --git a/builtin-gc.c b/builtin/gc.c\nsimilarity index 100%\nrename from builtin-gc.c\nrename to builtin/gc.c\ndiff --git a/builtin-grep.c b/builtin/grep.c\nsimilarity index 100%\nrename from builtin-grep.c\nrename to builtin/grep.c\ndiff --git a/builtin-hash-object.c b/builtin/hash-object.c\nsimilarity index 100%\nrename from builtin-hash-object.c\nrename to builtin/hash-object.c\ndiff --git a/builtin-help.c b/builtin/help.c\nsimilarity index 100%\nrename from builtin-help.c\nrename to builtin/help.c\ndiff --git a/builtin-index-pack.c b/builtin/index-pack.c\nsimilarity index 100%\nrename from builtin-index-pack.c\nrename to builtin/index-pack.c\ndiff --git a/builtin-init-db.c b/builtin/init-db.c\nsimilarity index 100%\nrename from builtin-init-db.c\nrename to builtin/init-db.c\ndiff --git a/builtin-log.c b/builtin/log.c\nsimilarity index 100%\nrename from builtin-log.c\nrename to builtin/log.c\ndiff --git a/builtin-ls-files.c b/builtin/ls-files.c\nsimilarity index 100%\nrename from builtin-ls-files.c\nrename to builtin/ls-files.c\ndiff --git a/builtin-ls-remote.c b/builtin/ls-remote.c\nsimilarity index 100%\nrename from builtin-ls-remote.c\nrename to builtin/ls-remote.c\ndiff --git a/builtin-ls-tree.c b/builtin/ls-tree.c\nsimilarity index 100%\nrename from builtin-ls-tree.c\nrename to builtin/ls-tree.c\ndiff --git a/builtin-mailinfo.c b/builtin/mailinfo.c\nsimilarity index 100%\nrename from builtin-mailinfo.c\nrename to builtin/mailinfo.c\ndiff --git a/builtin-mailsplit.c b/builtin/mailsplit.c\nsimilarity index 100%\nrename from builtin-mailsplit.c\nrename to builtin/mailsplit.c\ndiff --git a/builtin-merge-base.c b/builtin/merge-base.c\nsimilarity index 100%\nrename from builtin-merge-base.c\nrename to builtin/merge-base.c\ndiff --git a/builtin-merge-file.c b/builtin/merge-file.c\nsimilarity index 100%\nrename from builtin-merge-file.c\nrename to builtin/merge-file.c\ndiff --git a/builtin-merge-index.c b/builtin/merge-index.c\nsimilarity index 100%\nrename from builtin-merge-index.c\nrename to builtin/merge-index.c\ndiff --git a/builtin-merge-ours.c b/builtin/merge-ours.c\nsimilarity index 100%\nrename from builtin-merge-ours.c\nrename to builtin/merge-ours.c\ndiff --git a/builtin-merge-recursive.c b/builtin/merge-recursive.c\nsimilarity index 100%\nrename from builtin-merge-recursive.c\nrename to builtin/merge-recursive.c\ndiff --git a/builtin-merge-tree.c b/builtin/merge-tree.c\nsimilarity index 100%\nrename from builtin-merge-tree.c\nrename to builtin/merge-tree.c\ndiff --git a/builtin-merge.c b/builtin/merge.c\nsimilarity index 100%\nrename from builtin-merge.c\nrename to builtin/merge.c\ndiff --git a/builtin-mktag.c b/builtin/mktag.c\nsimilarity index 100%\nrename from builtin-mktag.c\nrename to builtin/mktag.c\ndiff --git a/builtin-mktree.c b/builtin/mktree.c\nsimilarity index 100%\nrename from builtin-mktree.c\nrename to builtin/mktree.c\ndiff --git a/builtin-mv.c b/builtin/mv.c\nsimilarity index 100%\nrename from builtin-mv.c\nrename to builtin/mv.c\ndiff --git a/builtin-name-rev.c b/builtin/name-rev.c\nsimilarity index 100%\nrename from builtin-name-rev.c\nrename to builtin/name-rev.c\ndiff --git a/builtin-pack-objects.c b/builtin/pack-objects.c\nsimilarity index 100%\nrename from builtin-pack-objects.c\nrename to builtin/pack-objects.c\ndiff --git a/builtin-pack-redundant.c b/builtin/pack-redundant.c\nsimilarity index 100%\nrename from builtin-pack-redundant.c\nrename to builtin/pack-redundant.c\ndiff --git a/builtin-pack-refs.c b/builtin/pack-refs.c\nsimilarity index 100%\nrename from builtin-pack-refs.c\nrename to builtin/pack-refs.c\ndiff --git a/builtin-patch-id.c b/builtin/patch-id.c\nsimilarity index 100%\nrename from builtin-patch-id.c\nrename to builtin/patch-id.c\ndiff --git a/builtin-prune-packed.c b/builtin/prune-packed.c\nsimilarity index 100%\nrename from builtin-prune-packed.c\nrename to builtin/prune-packed.c\ndiff --git a/builtin-prune.c b/builtin/prune.c\nsimilarity index 100%\nrename from builtin-prune.c\nrename to builtin/prune.c\ndiff --git a/builtin-push.c b/builtin/push.c\nsimilarity index 100%\nrename from builtin-push.c\nrename to builtin/push.c\ndiff --git a/builtin-read-tree.c b/builtin/read-tree.c\nsimilarity index 100%\nrename from builtin-read-tree.c\nrename to builtin/read-tree.c\ndiff --git a/builtin-receive-pack.c b/builtin/receive-pack.c\nsimilarity index 100%\nrename from builtin-receive-pack.c\nrename to builtin/receive-pack.c\ndiff --git a/builtin-reflog.c b/builtin/reflog.c\nsimilarity index 100%\nrename from builtin-reflog.c\nrename to builtin/reflog.c\ndiff --git a/builtin-remote.c b/builtin/remote.c\nsimilarity index 100%\nrename from builtin-remote.c\nrename to builtin/remote.c\ndiff --git a/builtin-replace.c b/builtin/replace.c\nsimilarity index 100%\nrename from builtin-replace.c\nrename to builtin/replace.c\ndiff --git a/builtin-rerere.c b/builtin/rerere.c\nsimilarity index 100%\nrename from builtin-rerere.c\nrename to builtin/rerere.c\ndiff --git a/builtin-reset.c b/builtin/reset.c\nsimilarity index 100%\nrename from builtin-reset.c\nrename to builtin/reset.c\ndiff --git a/builtin-rev-list.c b/builtin/rev-list.c\nsimilarity index 100%\nrename from builtin-rev-list.c\nrename to builtin/rev-list.c\ndiff --git a/builtin-rev-parse.c b/builtin/rev-parse.c\nsimilarity index 100%\nrename from builtin-rev-parse.c\nrename to builtin/rev-parse.c\ndiff --git a/builtin-revert.c b/builtin/revert.c\nsimilarity index 100%\nrename from builtin-revert.c\nrename to builtin/revert.c\ndiff --git a/builtin-rm.c b/builtin/rm.c\nsimilarity index 100%\nrename from builtin-rm.c\nrename to builtin/rm.c\ndiff --git a/builtin-send-pack.c b/builtin/send-pack.c\nsimilarity index 100%\nrename from builtin-send-pack.c\nrename to builtin/send-pack.c\ndiff --git a/builtin-shortlog.c b/builtin/shortlog.c\nsimilarity index 100%\nrename from builtin-shortlog.c\nrename to builtin/shortlog.c\ndiff --git a/builtin-show-branch.c b/builtin/show-branch.c\nsimilarity index 100%\nrename from builtin-show-branch.c\nrename to builtin/show-branch.c\ndiff --git a/builtin-show-ref.c b/builtin/show-ref.c\nsimilarity index 100%\nrename from builtin-show-ref.c\nrename to builtin/show-ref.c\ndiff --git a/builtin-stripspace.c b/builtin/stripspace.c\nsimilarity index 100%\nrename from builtin-stripspace.c\nrename to builtin/stripspace.c\ndiff --git a/builtin-symbolic-ref.c b/builtin/symbolic-ref.c\nsimilarity index 100%\nrename from builtin-symbolic-ref.c\nrename to builtin/symbolic-ref.c\ndiff --git a/builtin-tag.c b/builtin/tag.c\nsimilarity index 100%\nrename from builtin-tag.c\nrename to builtin/tag.c\ndiff --git a/builtin-tar-tree.c b/builtin/tar-tree.c\nsimilarity index 100%\nrename from builtin-tar-tree.c\nrename to builtin/tar-tree.c\ndiff --git a/builtin-unpack-file.c b/builtin/unpack-file.c\nsimilarity index 100%\nrename from builtin-unpack-file.c\nrename to builtin/unpack-file.c\ndiff --git a/builtin-unpack-objects.c b/builtin/unpack-objects.c\nsimilarity index 100%\nrename from builtin-unpack-objects.c\nrename to builtin/unpack-objects.c\ndiff --git a/builtin-update-index.c b/builtin/update-index.c\nsimilarity index 100%\nrename from builtin-update-index.c\nrename to builtin/update-index.c\ndiff --git a/builtin-update-ref.c b/builtin/update-ref.c\nsimilarity index 100%\nrename from builtin-update-ref.c\nrename to builtin/update-ref.c\ndiff --git a/builtin-update-server-info.c b/builtin/update-server-info.c\nsimilarity index 100%\nrename from builtin-update-server-info.c\nrename to builtin/update-server-info.c\ndiff --git a/builtin-upload-archive.c b/builtin/upload-archive.c\nsimilarity index 100%\nrename from builtin-upload-archive.c\nrename to builtin/upload-archive.c\ndiff --git a/builtin-var.c b/builtin/var.c\nsimilarity index 100%\nrename from builtin-var.c\nrename to builtin/var.c\ndiff --git a/builtin-verify-pack.c b/builtin/verify-pack.c\nsimilarity index 100%\nrename from builtin-verify-pack.c\nrename to builtin/verify-pack.c\ndiff --git a/builtin-verify-tag.c b/builtin/verify-tag.c\nsimilarity index 100%\nrename from builtin-verify-tag.c\nrename to builtin/verify-tag.c\ndiff --git a/builtin-write-tree.c b/builtin/write-tree.c\nsimilarity index 100%\nrename from builtin-write-tree.c\nrename to builtin/write-tree.c\n"},{"id":"135003","messageId":"7vbpfm9tst.fsf@alter.siamese.dyndns.org","threadId":"22715","inReplyTo":"alpine.LFD.2.00.1002181010590.4141@localhost.localdomain","subject":"Re: [RFD] Deepen the git directory structure a bit.","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-02-18T20:24:02Z","receivedAt":"2010-02-18T20:24:02Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Linus Torvalds <torvalds@linux-foundation.org> writes:\n\n> I think this coul probably be done differently (I'm not proud of that ugly \n> '-I. -Ibuiltin' addition to the CFLAGS, for example), and I think there \n> are _other_ things we could also try to do to move files into \n> subdirectories, but this was a fairly easy thing to basically script.\n>\n> What do people think?\n\nI personally like the general direction you are going.  One minor detail I\ndo not know about is whether to move \"builtin.h\" with others, or leave it\nat the top.  Also I don't particularly find \"-I. -Ibuiltin/\" ugly.  It\nwould make sense to use \"-I.\" and rewrite our '#include \"xyzzy.h\"' into\n'#include <xyzzy.h>' even if we were not doing this change.\n"},{"id":"135012","messageId":"32541b131002181350p245b7fbdw4398501b65835cac@mail.gmail.com","threadId":"22715","inReplyTo":"7vbpfm9tst.fsf@alter.siamese.dyndns.org","subject":"Re: [RFD] Deepen the git directory structure a bit.","fromName":"Avery Pennarun","fromEmail":"apenwarr@gmail.com","sentAt":"2010-02-18T21:50:14Z","receivedAt":"2010-02-18T21:50:14Z","isPatch":false,"sender":{"key":"apenwarr@gmail.com","avatar":"https://avatars.githubusercontent.com/u/20592?v=4"},"body":"On Thu, Feb 18, 2010 at 3:24 PM, Junio C Hamano <gitster@pobox.com> wrote:\n> Linus Torvalds <torvalds@linux-foundation.org> writes:\n>> I think this coul probably be done differently (I'm not proud of that ugly\n>> '-I. -Ibuiltin' addition to the CFLAGS, for example), and I think there\n>> are _other_ things we could also try to do to move files into\n>> subdirectories, but this was a fairly easy thing to basically script.\n>>\n>> What do people think?\n>\n> I personally like the general direction you are going.  One minor detail I\n> do not know about is whether to move \"builtin.h\" with others, or leave it\n> at the top.\n\nIf you don't move it, then it'll continue to interfere with\nautocompletion.  Though maybe that's not a good enough reason :)\n\nHave fun,\n\nAvery\n"},{"id":"135016","messageId":"alpine.LFD.2.00.1002181416410.4141@localhost.localdomain","threadId":"22715","inReplyTo":"7vbpfm9tst.fsf@alter.siamese.dyndns.org","subject":"Re: [RFD] Deepen the git directory structure a bit.","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2010-02-18T22:18:06Z","receivedAt":"2010-02-18T22:18:06Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Thu, 18 Feb 2010, Junio C Hamano wrote:\n> \n> I personally like the general direction you are going.  One minor detail I\n> do not know about is whether to move \"builtin.h\" with others, or leave it\n> at the top.  Also I don't particularly find \"-I. -Ibuiltin/\" ugly.  It\n> would make sense to use \"-I.\" and rewrite our '#include \"xyzzy.h\"' into\n> '#include <xyzzy.h>' even if we were not doing this change.\n\nI was actually thinking of just changing everybody to use\n\n\t-#include \"builtin.h\"\n\t+#include \"builtin/cmd.h\"\n\nand I even did that with a sed script, but then the renames aren't pure \nrenames any more, so I decided that in order to make the patch be a \nminimal rename thing, that would be a second phase.\n\n\t\tLinus\n"},{"id":"135017","messageId":"alpine.LFD.2.00.1002181418160.4141@localhost.localdomain","threadId":"22715","inReplyTo":"32541b131002181350p245b7fbdw4398501b65835cac@mail.gmail.com","subject":"Re: [RFD] Deepen the git directory structure a bit.","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2010-02-18T22:20:09Z","receivedAt":"2010-02-18T22:20:09Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Thu, 18 Feb 2010, Avery Pennarun wrote:\n> \n> If you don't move it, then it'll continue to interfere with\n> autocompletion.  Though maybe that's not a good enough reason :)\n\nYeah, that's not a huge deal. We have other files that share prefixes. The \n\"builtin-\" prefix was just _so_ common as to really screw up \nauto-completion in a big way.\n\nSo the reason for moving builtin.h was simply that _most_ of the users are \nthe builtin headers themselves (and as mentioned, I was thinking of \nmaking it builtin/cmd.h but avoided it to keep the patch size down).\n\n\t\tLinus\n"},{"id":"135025","messageId":"46d6db661002181534r10a887b5gcc23435cb8952f13@mail.gmail.com","threadId":"22715","inReplyTo":"alpine.LFD.2.00.1002181010590.4141@localhost.localdomain","subject":"Re: [RFD] Deepen the git directory structure a bit.","fromName":"Christian MICHON","fromEmail":"christian.michon@gmail.com","sentAt":"2010-02-18T23:34:37Z","receivedAt":"2010-02-18T23:34:37Z","isPatch":false,"sender":{"key":"christian.michon@gmail.com","avatar":"https://gravatar.com/avatar/8a7c327b21187fbcab5c27640a49450eec72e0355dc292501197f27a5a744ec4?d=mp&s=160"},"body":"On Thu, Feb 18, 2010 at 7:36 PM, Linus Torvalds\n<torvalds@linux-foundation.org> wrote:\n>\n> Ok, this is just a request-for-discussion. I'm trying out a patch like\n> this, and I think it's a step in the right direction. The git directory\n> structure is _very_ flat, and currently in a fully built git tree, the\n> top-level directory has something like 750 files in it.\n>\n> After this, it still has a ton of files, but it has shrunk to ~575 files\n> instead, and at least for my (admittedly somewhat odd) setup, that\n> actually matters for auto-completion etc.\n\nmaybe rather than just autocompletion, it does help new code to land\nin the right place ? I think just for this reason at least it's a good\nmove.\n\nI've a wild idea on a new command to add to git and I was pondering\nbetween having it as a perl script or a builtin. Now I know where it\nshould go if I choose a builtin, provided you get a wide consensus.\n\n> which doesn't seem all that different, but not having that annoying\n> break in \"Display all 180 possibilities?\" is quite a relief.\n>\n> NOTE! If you do this in a clean tree (no object files etc), or using an\n> editor that has auto-completion rules that ignores '*.o' files, you\n> won't see that annoying 'Display all 180 possibilities?' message - it\n> will just show the choices instead.  I think bash has some cut-off\n> around 100 choices or something.\n\nodd. On my msysgit setup and bash 3.1, I get this on a clean tree:\n\n$ ls builtin<tab>\nDisplay all 90 possibilities? (y or n)\n\nBut hey, this is on Windows, so we should not bother :-)\n\n-- \nChristian\n--\nhttp://detaolb.sourceforge.net/, a linux distribution for Qemu with Git inside !\n"},{"id":"135033","messageId":"e72faaa81002181950q18a80f31p96d9f8f05c968e01@mail.gmail.com","threadId":"22715","inReplyTo":"46d6db661002181534r10a887b5gcc23435cb8952f13@mail.gmail.com","subject":"Re: [RFD] Deepen the git directory structure a bit.","fromName":"Pavan Kumar Sunkara","fromEmail":"pavan.sss1991@gmail.com","sentAt":"2010-02-19T03:50:31Z","receivedAt":"2010-02-19T03:50:31Z","isPatch":false,"sender":{"key":"pavan.sss1991@gmail.com","avatar":"https://avatars.githubusercontent.com/u/174703?v=4"},"body":">\n> maybe rather than just autocompletion, it does help new code to land\n> in the right place ? I think just for this reason at least it's a good\n> move.\n>\n> I've a wild idea on a new command to add to git and I was pondering\n> between having it as a perl script or a builtin. Now I know where it\n> should go if I choose a builtin, provided you get a wide consensus.\n>\n\nI agree with this. This will be very good to guys who want to start\nunderstanding the code completely\n"},{"id":"135323","messageId":"alpine.LFD.2.00.1002220830550.4141@localhost.localdomain","threadId":"22715","inReplyTo":"alpine.LFD.2.00.1002181010590.4141@localhost.localdomain","subject":"Re: [RFD] Deepen the git directory structure a bit.","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2010-02-22T16:42:18Z","receivedAt":"2010-02-22T16:42:18Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nBtw, here's a new version of this without the 'builtin.h' rename. This was \nbasically created with:\n\n\tfor i in builtin-*; do git mv $i $(echo $i | sed 's:builtin-:builtin/:'); done\n\tsed 's:builtin-:builtin/:' Makefile > Makefile.new\n\tmv Makefile.new Makefile\n\t ... add '-I.' to BASIC_FLAGS in 'Makefile' ...\n\tgit commit -a\n\nand it leaves the issue of what to do with the header files for later.\n\nFor example, maybe somebody would want to split up the makefile so that \nthe 'builtin' subdirectory gets built all on its own. In which case you'd \ndo a \"-I..\" there instead. Or maybe somebody wants to move the header \nfiles to a directory of their own, separate from either the regular C \nfiles _and_ the builtin commands.\n\nSo to not even weigh in on that whole discussion, this _just_ moves the \nbuiltin-* files, and adds the currently minimal \"-I.\" to the makefile.\n\n\t\t\tLinus\n---\nFrom dc996ed626408db548cea7e7ed20186da735d558 Mon Sep 17 00:00:00 2001\nFrom: Linus Torvalds <torvalds@linux-foundation.org>\nDate: Thu, 18 Feb 2010 10:11:32 -0800\nSubject: [PATCH] Move 'builtin-*' into a 'builtin/' subdirectory\n\nThis shrinks the top-level directory a bit, and makes it much more\npleasant to use auto-completion on the thing. Instead of\n\n\t[torvalds@nehalem git]$ em buil<tab>\n\tDisplay all 180 possibilities? (y or n)\n\t[torvalds@nehalem git]$ em builtin-sh\n\tbuiltin-shortlog.c     builtin-show-branch.c  builtin-show-ref.c\n\tbuiltin-shortlog.o     builtin-show-branch.o  builtin-show-ref.o\n\t[torvalds@nehalem git]$ em builtin-shor<tab>\n\tbuiltin-shortlog.c  builtin-shortlog.o\n\t[torvalds@nehalem git]$ em builtin-shortlog.c\n\nyou get\n\n\t[torvalds@nehalem git]$ em buil<tab>\t\t[type]\n\tbuiltin/   builtin.h\n\t[torvalds@nehalem git]$ em builtin\t\t[auto-completes to]\n\t[torvalds@nehalem git]$ em builtin/sh<tab>\t[type]\n\tshortlog.c     shortlog.o     show-branch.c  show-branch.o  show-ref.c     show-ref.o\n\t[torvalds@nehalem git]$ em builtin/sho\t\t[auto-completes to]\n\t[torvalds@nehalem git]$ em builtin/shor<tab>\t[type]\n\tshortlog.c  shortlog.o\n\t[torvalds@nehalem git]$ em builtin/shortlog.c\n\nwhich doesn't seem all that different, but not having that annoying\nbreak in \"Display all 180 possibilities?\" is quite a relief.\n\nNOTE! If you do this in a clean tree (no object files etc), or using an\neditor that has auto-completion rules that ignores '*.o' files, you\nwon't see that annoying 'Display all 180 possibilities?' message - it\nwill just show the choices instead.  I think bash has some cut-off\naround 100 choices or something.\n\nSo the reason I see this is that I'm using an odd editory, and thus\ndon't have the rules to cut down on auto-completion.  But you can\nsimulate that by using 'ls' instead, or something similar.\n\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>\n---\n Makefile                                           |  192 ++++++++++----------\n builtin-add.c => builtin/add.c                     |    0\n builtin-annotate.c => builtin/annotate.c           |    0\n builtin-apply.c => builtin/apply.c                 |    0\n builtin-archive.c => builtin/archive.c             |    0\n .../bisect--helper.c                               |    0\n builtin-blame.c => builtin/blame.c                 |    0\n builtin-branch.c => builtin/branch.c               |    0\n builtin-bundle.c => builtin/bundle.c               |    0\n builtin-cat-file.c => builtin/cat-file.c           |    0\n builtin-check-attr.c => builtin/check-attr.c       |    0\n .../check-ref-format.c                             |    0\n .../checkout-index.c                               |    0\n builtin-checkout.c => builtin/checkout.c           |    0\n builtin-clean.c => builtin/clean.c                 |    0\n builtin-clone.c => builtin/clone.c                 |    0\n builtin-commit-tree.c => builtin/commit-tree.c     |    0\n builtin-commit.c => builtin/commit.c               |    0\n builtin-config.c => builtin/config.c               |    0\n builtin-count-objects.c => builtin/count-objects.c |    0\n builtin-describe.c => builtin/describe.c           |    0\n builtin-diff-files.c => builtin/diff-files.c       |    0\n builtin-diff-index.c => builtin/diff-index.c       |    0\n builtin-diff-tree.c => builtin/diff-tree.c         |    0\n builtin-diff.c => builtin/diff.c                   |    0\n builtin-fast-export.c => builtin/fast-export.c     |    0\n builtin-fetch-pack.c => builtin/fetch-pack.c       |    0\n builtin-fetch.c => builtin/fetch.c                 |    0\n builtin-fmt-merge-msg.c => builtin/fmt-merge-msg.c |    0\n builtin-for-each-ref.c => builtin/for-each-ref.c   |    0\n builtin-fsck.c => builtin/fsck.c                   |    0\n builtin-gc.c => builtin/gc.c                       |    0\n builtin-grep.c => builtin/grep.c                   |    0\n builtin-hash-object.c => builtin/hash-object.c     |    0\n builtin-help.c => builtin/help.c                   |    0\n builtin-index-pack.c => builtin/index-pack.c       |    0\n builtin-init-db.c => builtin/init-db.c             |    0\n builtin-log.c => builtin/log.c                     |    0\n builtin-ls-files.c => builtin/ls-files.c           |    0\n builtin-ls-remote.c => builtin/ls-remote.c         |    0\n builtin-ls-tree.c => builtin/ls-tree.c             |    0\n builtin-mailinfo.c => builtin/mailinfo.c           |    0\n builtin-mailsplit.c => builtin/mailsplit.c         |    0\n builtin-merge-base.c => builtin/merge-base.c       |    0\n builtin-merge-file.c => builtin/merge-file.c       |    0\n builtin-merge-index.c => builtin/merge-index.c     |    0\n builtin-merge-ours.c => builtin/merge-ours.c       |    0\n .../merge-recursive.c                              |    0\n builtin-merge-tree.c => builtin/merge-tree.c       |    0\n builtin-merge.c => builtin/merge.c                 |    0\n builtin-mktag.c => builtin/mktag.c                 |    0\n builtin-mktree.c => builtin/mktree.c               |    0\n builtin-mv.c => builtin/mv.c                       |    0\n builtin-name-rev.c => builtin/name-rev.c           |    0\n builtin-pack-objects.c => builtin/pack-objects.c   |    0\n .../pack-redundant.c                               |    0\n builtin-pack-refs.c => builtin/pack-refs.c         |    0\n builtin-patch-id.c => builtin/patch-id.c           |    0\n builtin-prune-packed.c => builtin/prune-packed.c   |    0\n builtin-prune.c => builtin/prune.c                 |    0\n builtin-push.c => builtin/push.c                   |    0\n builtin-read-tree.c => builtin/read-tree.c         |    0\n builtin-receive-pack.c => builtin/receive-pack.c   |    0\n builtin-reflog.c => builtin/reflog.c               |    0\n builtin-remote.c => builtin/remote.c               |    0\n builtin-replace.c => builtin/replace.c             |    0\n builtin-rerere.c => builtin/rerere.c               |    0\n builtin-reset.c => builtin/reset.c                 |    0\n builtin-rev-list.c => builtin/rev-list.c           |    0\n builtin-rev-parse.c => builtin/rev-parse.c         |    0\n builtin-revert.c => builtin/revert.c               |    0\n builtin-rm.c => builtin/rm.c                       |    0\n builtin-send-pack.c => builtin/send-pack.c         |    0\n builtin-shortlog.c => builtin/shortlog.c           |    0\n builtin-show-branch.c => builtin/show-branch.c     |    0\n builtin-show-ref.c => builtin/show-ref.c           |    0\n builtin-stripspace.c => builtin/stripspace.c       |    0\n builtin-symbolic-ref.c => builtin/symbolic-ref.c   |    0\n builtin-tag.c => builtin/tag.c                     |    0\n builtin-tar-tree.c => builtin/tar-tree.c           |    0\n builtin-unpack-file.c => builtin/unpack-file.c     |    0\n .../unpack-objects.c                               |    0\n builtin-update-index.c => builtin/update-index.c   |    0\n builtin-update-ref.c => builtin/update-ref.c       |    0\n .../update-server-info.c                           |    0\n .../upload-archive.c                               |    0\n builtin-var.c => builtin/var.c                     |    0\n builtin-verify-pack.c => builtin/verify-pack.c     |    0\n builtin-verify-tag.c => builtin/verify-tag.c       |    0\n builtin-write-tree.c => builtin/write-tree.c       |    0\n 90 files changed, 96 insertions(+), 96 deletions(-)\n rename builtin-add.c => builtin/add.c (100%)\n rename builtin-annotate.c => builtin/annotate.c (100%)\n rename builtin-apply.c => builtin/apply.c (100%)\n rename builtin-archive.c => builtin/archive.c (100%)\n rename builtin-bisect--helper.c => builtin/bisect--helper.c (100%)\n rename builtin-blame.c => builtin/blame.c (100%)\n rename builtin-branch.c => builtin/branch.c (100%)\n rename builtin-bundle.c => builtin/bundle.c (100%)\n rename builtin-cat-file.c => builtin/cat-file.c (100%)\n rename builtin-check-attr.c => builtin/check-attr.c (100%)\n rename builtin-check-ref-format.c => builtin/check-ref-format.c (100%)\n rename builtin-checkout-index.c => builtin/checkout-index.c (100%)\n rename builtin-checkout.c => builtin/checkout.c (100%)\n rename builtin-clean.c => builtin/clean.c (100%)\n rename builtin-clone.c => builtin/clone.c (100%)\n rename builtin-commit-tree.c => builtin/commit-tree.c (100%)\n rename builtin-commit.c => builtin/commit.c (100%)\n rename builtin-config.c => builtin/config.c (100%)\n rename builtin-count-objects.c => builtin/count-objects.c (100%)\n rename builtin-describe.c => builtin/describe.c (100%)\n rename builtin-diff-files.c => builtin/diff-files.c (100%)\n rename builtin-diff-index.c => builtin/diff-index.c (100%)\n rename builtin-diff-tree.c => builtin/diff-tree.c (100%)\n rename builtin-diff.c => builtin/diff.c (100%)\n rename builtin-fast-export.c => builtin/fast-export.c (100%)\n rename builtin-fetch-pack.c => builtin/fetch-pack.c (100%)\n rename builtin-fetch.c => builtin/fetch.c (100%)\n rename builtin-fmt-merge-msg.c => builtin/fmt-merge-msg.c (100%)\n rename builtin-for-each-ref.c => builtin/for-each-ref.c (100%)\n rename builtin-fsck.c => builtin/fsck.c (100%)\n rename builtin-gc.c => builtin/gc.c (100%)\n rename builtin-grep.c => builtin/grep.c (100%)\n rename builtin-hash-object.c => builtin/hash-object.c (100%)\n rename builtin-help.c => builtin/help.c (100%)\n rename builtin-index-pack.c => builtin/index-pack.c (100%)\n rename builtin-init-db.c => builtin/init-db.c (100%)\n rename builtin-log.c => builtin/log.c (100%)\n rename builtin-ls-files.c => builtin/ls-files.c (100%)\n rename builtin-ls-remote.c => builtin/ls-remote.c (100%)\n rename builtin-ls-tree.c => builtin/ls-tree.c (100%)\n rename builtin-mailinfo.c => builtin/mailinfo.c (100%)\n rename builtin-mailsplit.c => builtin/mailsplit.c (100%)\n rename builtin-merge-base.c => builtin/merge-base.c (100%)\n rename builtin-merge-file.c => builtin/merge-file.c (100%)\n rename builtin-merge-index.c => builtin/merge-index.c (100%)\n rename builtin-merge-ours.c => builtin/merge-ours.c (100%)\n rename builtin-merge-recursive.c => builtin/merge-recursive.c (100%)\n rename builtin-merge-tree.c => builtin/merge-tree.c (100%)\n rename builtin-merge.c => builtin/merge.c (100%)\n rename builtin-mktag.c => builtin/mktag.c (100%)\n rename builtin-mktree.c => builtin/mktree.c (100%)\n rename builtin-mv.c => builtin/mv.c (100%)\n rename builtin-name-rev.c => builtin/name-rev.c (100%)\n rename builtin-pack-objects.c => builtin/pack-objects.c (100%)\n rename builtin-pack-redundant.c => builtin/pack-redundant.c (100%)\n rename builtin-pack-refs.c => builtin/pack-refs.c (100%)\n rename builtin-patch-id.c => builtin/patch-id.c (100%)\n rename builtin-prune-packed.c => builtin/prune-packed.c (100%)\n rename builtin-prune.c => builtin/prune.c (100%)\n rename builtin-push.c => builtin/push.c (100%)\n rename builtin-read-tree.c => builtin/read-tree.c (100%)\n rename builtin-receive-pack.c => builtin/receive-pack.c (100%)\n rename builtin-reflog.c => builtin/reflog.c (100%)\n rename builtin-remote.c => builtin/remote.c (100%)\n rename builtin-replace.c => builtin/replace.c (100%)\n rename builtin-rerere.c => builtin/rerere.c (100%)\n rename builtin-reset.c => builtin/reset.c (100%)\n rename builtin-rev-list.c => builtin/rev-list.c (100%)\n rename builtin-rev-parse.c => builtin/rev-parse.c (100%)\n rename builtin-revert.c => builtin/revert.c (100%)\n rename builtin-rm.c => builtin/rm.c (100%)\n rename builtin-send-pack.c => builtin/send-pack.c (100%)\n rename builtin-shortlog.c => builtin/shortlog.c (100%)\n rename builtin-show-branch.c => builtin/show-branch.c (100%)\n rename builtin-show-ref.c => builtin/show-ref.c (100%)\n rename builtin-stripspace.c => builtin/stripspace.c (100%)\n rename builtin-symbolic-ref.c => builtin/symbolic-ref.c (100%)\n rename builtin-tag.c => builtin/tag.c (100%)\n rename builtin-tar-tree.c => builtin/tar-tree.c (100%)\n rename builtin-unpack-file.c => builtin/unpack-file.c (100%)\n rename builtin-unpack-objects.c => builtin/unpack-objects.c (100%)\n rename builtin-update-index.c => builtin/update-index.c (100%)\n rename builtin-update-ref.c => builtin/update-ref.c (100%)\n rename builtin-update-server-info.c => builtin/update-server-info.c (100%)\n rename builtin-upload-archive.c => builtin/upload-archive.c (100%)\n rename builtin-var.c => builtin/var.c (100%)\n rename builtin-verify-pack.c => builtin/verify-pack.c (100%)\n rename builtin-verify-tag.c => builtin/verify-tag.c (100%)\n rename builtin-write-tree.c => builtin/write-tree.c (100%)\n\ndiff --git a/Makefile b/Makefile\nindex afedb54..b7fcb92 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -301,7 +301,7 @@ SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__\n # Those must not be GNU-specific; they are shared with perl/ which may\n # be built by a different compiler. (Note that this is an artifact now\n # but it still might be nice to keep that distinction.)\n-BASIC_CFLAGS =\n+BASIC_CFLAGS = -I.\n BASIC_LDFLAGS =\n \n # Guard against environment variables\n@@ -370,8 +370,8 @@ PROGRAMS += git-upload-pack$X\n PROGRAMS += git-http-backend$X\n \n # List built-in command $C whose implementation cmd_$C() is not in\n-# builtin-$C.o but is linked in as part of some other command.\n-BUILT_INS += $(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))\n+# builtin/$C.o but is linked in as part of some other command.\n+BUILT_INS += $(patsubst builtin/%.o,git-%$X,$(BUILTIN_OBJS))\n \n BUILT_INS += git-cherry$X\n BUILT_INS += git-cherry-pick$X\n@@ -594,95 +594,95 @@ LIB_OBJS += ws.o\n LIB_OBJS += wt-status.o\n LIB_OBJS += xdiff-interface.o\n \n-BUILTIN_OBJS += builtin-add.o\n-BUILTIN_OBJS += builtin-annotate.o\n-BUILTIN_OBJS += builtin-apply.o\n-BUILTIN_OBJS += builtin-archive.o\n-BUILTIN_OBJS += builtin-bisect--helper.o\n-BUILTIN_OBJS += builtin-blame.o\n-BUILTIN_OBJS += builtin-branch.o\n-BUILTIN_OBJS += builtin-bundle.o\n-BUILTIN_OBJS += builtin-cat-file.o\n-BUILTIN_OBJS += builtin-check-attr.o\n-BUILTIN_OBJS += builtin-check-ref-format.o\n-BUILTIN_OBJS += builtin-checkout-index.o\n-BUILTIN_OBJS += builtin-checkout.o\n-BUILTIN_OBJS += builtin-clean.o\n-BUILTIN_OBJS += builtin-clone.o\n-BUILTIN_OBJS += builtin-commit-tree.o\n-BUILTIN_OBJS += builtin-commit.o\n-BUILTIN_OBJS += builtin-config.o\n-BUILTIN_OBJS += builtin-count-objects.o\n-BUILTIN_OBJS += builtin-describe.o\n-BUILTIN_OBJS += builtin-diff-files.o\n-BUILTIN_OBJS += builtin-diff-index.o\n-BUILTIN_OBJS += builtin-diff-tree.o\n-BUILTIN_OBJS += builtin-diff.o\n-BUILTIN_OBJS += builtin-fast-export.o\n-BUILTIN_OBJS += builtin-fetch-pack.o\n-BUILTIN_OBJS += builtin-fetch.o\n-BUILTIN_OBJS += builtin-fmt-merge-msg.o\n-BUILTIN_OBJS += builtin-for-each-ref.o\n-BUILTIN_OBJS += builtin-fsck.o\n-BUILTIN_OBJS += builtin-gc.o\n-BUILTIN_OBJS += builtin-grep.o\n-BUILTIN_OBJS += builtin-hash-object.o\n-BUILTIN_OBJS += builtin-help.o\n-BUILTIN_OBJS += builtin-index-pack.o\n-BUILTIN_OBJS += builtin-init-db.o\n-BUILTIN_OBJS += builtin-log.o\n-BUILTIN_OBJS += builtin-ls-files.o\n-BUILTIN_OBJS += builtin-ls-remote.o\n-BUILTIN_OBJS += builtin-ls-tree.o\n-BUILTIN_OBJS += builtin-mailinfo.o\n-BUILTIN_OBJS += builtin-mailsplit.o\n-BUILTIN_OBJS += builtin-merge.o\n-BUILTIN_OBJS += builtin-merge-base.o\n-BUILTIN_OBJS += builtin-merge-file.o\n-BUILTIN_OBJS += builtin-merge-index.o\n-BUILTIN_OBJS += builtin-merge-ours.o\n-BUILTIN_OBJS += builtin-merge-recursive.o\n-BUILTIN_OBJS += builtin-merge-tree.o\n-BUILTIN_OBJS += builtin-mktag.o\n-BUILTIN_OBJS += builtin-mktree.o\n-BUILTIN_OBJS += builtin-mv.o\n-BUILTIN_OBJS += builtin-name-rev.o\n-BUILTIN_OBJS += builtin-pack-objects.o\n-BUILTIN_OBJS += builtin-pack-redundant.o\n-BUILTIN_OBJS += builtin-pack-refs.o\n-BUILTIN_OBJS += builtin-patch-id.o\n-BUILTIN_OBJS += builtin-prune-packed.o\n-BUILTIN_OBJS += builtin-prune.o\n-BUILTIN_OBJS += builtin-push.o\n-BUILTIN_OBJS += builtin-read-tree.o\n-BUILTIN_OBJS += builtin-receive-pack.o\n-BUILTIN_OBJS += builtin-reflog.o\n-BUILTIN_OBJS += builtin-remote.o\n-BUILTIN_OBJS += builtin-replace.o\n-BUILTIN_OBJS += builtin-rerere.o\n-BUILTIN_OBJS += builtin-reset.o\n-BUILTIN_OBJS += builtin-rev-list.o\n-BUILTIN_OBJS += builtin-rev-parse.o\n-BUILTIN_OBJS += builtin-revert.o\n-BUILTIN_OBJS += builtin-rm.o\n-BUILTIN_OBJS += builtin-send-pack.o\n-BUILTIN_OBJS += builtin-shortlog.o\n-BUILTIN_OBJS += builtin-show-branch.o\n-BUILTIN_OBJS += builtin-show-ref.o\n-BUILTIN_OBJS += builtin-stripspace.o\n-BUILTIN_OBJS += builtin-symbolic-ref.o\n-BUILTIN_OBJS += builtin-tag.o\n-BUILTIN_OBJS += builtin-tar-tree.o\n-BUILTIN_OBJS += builtin-unpack-file.o\n-BUILTIN_OBJS += builtin-unpack-objects.o\n-BUILTIN_OBJS += builtin-update-index.o\n-BUILTIN_OBJS += builtin-update-ref.o\n-BUILTIN_OBJS += builtin-update-server-info.o\n-BUILTIN_OBJS += builtin-upload-archive.o\n-BUILTIN_OBJS += builtin-var.o\n-BUILTIN_OBJS += builtin-verify-pack.o\n-BUILTIN_OBJS += builtin-verify-tag.o\n-BUILTIN_OBJS += builtin-write-tree.o\n+BUILTIN_OBJS += builtin/add.o\n+BUILTIN_OBJS += builtin/annotate.o\n+BUILTIN_OBJS += builtin/apply.o\n+BUILTIN_OBJS += builtin/archive.o\n+BUILTIN_OBJS += builtin/bisect--helper.o\n+BUILTIN_OBJS += builtin/blame.o\n+BUILTIN_OBJS += builtin/branch.o\n+BUILTIN_OBJS += builtin/bundle.o\n+BUILTIN_OBJS += builtin/cat-file.o\n+BUILTIN_OBJS += builtin/check-attr.o\n+BUILTIN_OBJS += builtin/check-ref-format.o\n+BUILTIN_OBJS += builtin/checkout-index.o\n+BUILTIN_OBJS += builtin/checkout.o\n+BUILTIN_OBJS += builtin/clean.o\n+BUILTIN_OBJS += builtin/clone.o\n+BUILTIN_OBJS += builtin/commit-tree.o\n+BUILTIN_OBJS += builtin/commit.o\n+BUILTIN_OBJS += builtin/config.o\n+BUILTIN_OBJS += builtin/count-objects.o\n+BUILTIN_OBJS += builtin/describe.o\n+BUILTIN_OBJS += builtin/diff-files.o\n+BUILTIN_OBJS += builtin/diff-index.o\n+BUILTIN_OBJS += builtin/diff-tree.o\n+BUILTIN_OBJS += builtin/diff.o\n+BUILTIN_OBJS += builtin/fast-export.o\n+BUILTIN_OBJS += builtin/fetch-pack.o\n+BUILTIN_OBJS += builtin/fetch.o\n+BUILTIN_OBJS += builtin/fmt-merge-msg.o\n+BUILTIN_OBJS += builtin/for-each-ref.o\n+BUILTIN_OBJS += builtin/fsck.o\n+BUILTIN_OBJS += builtin/gc.o\n+BUILTIN_OBJS += builtin/grep.o\n+BUILTIN_OBJS += builtin/hash-object.o\n+BUILTIN_OBJS += builtin/help.o\n+BUILTIN_OBJS += builtin/index-pack.o\n+BUILTIN_OBJS += builtin/init-db.o\n+BUILTIN_OBJS += builtin/log.o\n+BUILTIN_OBJS += builtin/ls-files.o\n+BUILTIN_OBJS += builtin/ls-remote.o\n+BUILTIN_OBJS += builtin/ls-tree.o\n+BUILTIN_OBJS += builtin/mailinfo.o\n+BUILTIN_OBJS += builtin/mailsplit.o\n+BUILTIN_OBJS += builtin/merge.o\n+BUILTIN_OBJS += builtin/merge-base.o\n+BUILTIN_OBJS += builtin/merge-file.o\n+BUILTIN_OBJS += builtin/merge-index.o\n+BUILTIN_OBJS += builtin/merge-ours.o\n+BUILTIN_OBJS += builtin/merge-recursive.o\n+BUILTIN_OBJS += builtin/merge-tree.o\n+BUILTIN_OBJS += builtin/mktag.o\n+BUILTIN_OBJS += builtin/mktree.o\n+BUILTIN_OBJS += builtin/mv.o\n+BUILTIN_OBJS += builtin/name-rev.o\n+BUILTIN_OBJS += builtin/pack-objects.o\n+BUILTIN_OBJS += builtin/pack-redundant.o\n+BUILTIN_OBJS += builtin/pack-refs.o\n+BUILTIN_OBJS += builtin/patch-id.o\n+BUILTIN_OBJS += builtin/prune-packed.o\n+BUILTIN_OBJS += builtin/prune.o\n+BUILTIN_OBJS += builtin/push.o\n+BUILTIN_OBJS += builtin/read-tree.o\n+BUILTIN_OBJS += builtin/receive-pack.o\n+BUILTIN_OBJS += builtin/reflog.o\n+BUILTIN_OBJS += builtin/remote.o\n+BUILTIN_OBJS += builtin/replace.o\n+BUILTIN_OBJS += builtin/rerere.o\n+BUILTIN_OBJS += builtin/reset.o\n+BUILTIN_OBJS += builtin/rev-list.o\n+BUILTIN_OBJS += builtin/rev-parse.o\n+BUILTIN_OBJS += builtin/revert.o\n+BUILTIN_OBJS += builtin/rm.o\n+BUILTIN_OBJS += builtin/send-pack.o\n+BUILTIN_OBJS += builtin/shortlog.o\n+BUILTIN_OBJS += builtin/show-branch.o\n+BUILTIN_OBJS += builtin/show-ref.o\n+BUILTIN_OBJS += builtin/stripspace.o\n+BUILTIN_OBJS += builtin/symbolic-ref.o\n+BUILTIN_OBJS += builtin/tag.o\n+BUILTIN_OBJS += builtin/tar-tree.o\n+BUILTIN_OBJS += builtin/unpack-file.o\n+BUILTIN_OBJS += builtin/unpack-objects.o\n+BUILTIN_OBJS += builtin/update-index.o\n+BUILTIN_OBJS += builtin/update-ref.o\n+BUILTIN_OBJS += builtin/update-server-info.o\n+BUILTIN_OBJS += builtin/upload-archive.o\n+BUILTIN_OBJS += builtin/var.o\n+BUILTIN_OBJS += builtin/verify-pack.o\n+BUILTIN_OBJS += builtin/verify-tag.o\n+BUILTIN_OBJS += builtin/write-tree.o\n \n GITLIBS = $(LIB_FILE) $(XDIFF_LIB)\n EXTLIBS =\n@@ -1447,8 +1447,8 @@ git$X: git.o $(BUILTIN_OBJS) $(GITLIBS)\n \t$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \\\n \t\t$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)\n \n-builtin-help.o: common-cmds.h\n-builtin-help.s builtin-help.o: ALL_CFLAGS += \\\n+builtin/help.o: common-cmds.h\n+builtin/help.s builtin/help.o: ALL_CFLAGS += \\\n \t'-DGIT_HTML_PATH=\"$(htmldir_SQ)\"' \\\n \t'-DGIT_MAN_PATH=\"$(mandir_SQ)\"' \\\n \t'-DGIT_INFO_PATH=\"$(infodir_SQ)\"'\n@@ -1604,7 +1604,7 @@ exec_cmd.s exec_cmd.o: ALL_CFLAGS += \\\n \t'-DBINDIR=\"$(bindir_relative_SQ)\"' \\\n \t'-DPREFIX=\"$(prefix_SQ)\"'\n \n-builtin-init-db.s builtin-init-db.o: ALL_CFLAGS += \\\n+builtin/init-db.s builtin/init-db.o: ALL_CFLAGS += \\\n \t-DDEFAULT_GIT_TEMPLATE_DIR='\"$(template_dir_SQ)\"'\n \n config.s config.o: ALL_CFLAGS += -DETC_GITCONFIG='\"$(ETC_GITCONFIG_SQ)\"'\n@@ -1646,7 +1646,7 @@ $(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o $(GITLIBS)\n \n $(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)\n $(patsubst git-%$X,%.o,$(PROGRAMS)) git.o: $(LIB_H) $(wildcard */*.h)\n-builtin-revert.o wt-status.o: wt-status.h\n+builtin/revert.o wt-status.o: wt-status.h\n \n $(LIB_FILE): $(LIB_OBJS)\n \t$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)\ndiff --git a/builtin-add.c b/builtin/add.c\nsimilarity index 100%\nrename from builtin-add.c\nrename to builtin/add.c\ndiff --git a/builtin-annotate.c b/builtin/annotate.c\nsimilarity index 100%\nrename from builtin-annotate.c\nrename to builtin/annotate.c\ndiff --git a/builtin-apply.c b/builtin/apply.c\nsimilarity index 100%\nrename from builtin-apply.c\nrename to builtin/apply.c\ndiff --git a/builtin-archive.c b/builtin/archive.c\nsimilarity index 100%\nrename from builtin-archive.c\nrename to builtin/archive.c\ndiff --git a/builtin-bisect--helper.c b/builtin/bisect--helper.c\nsimilarity index 100%\nrename from builtin-bisect--helper.c\nrename to builtin/bisect--helper.c\ndiff --git a/builtin-blame.c b/builtin/blame.c\nsimilarity index 100%\nrename from builtin-blame.c\nrename to builtin/blame.c\ndiff --git a/builtin-branch.c b/builtin/branch.c\nsimilarity index 100%\nrename from builtin-branch.c\nrename to builtin/branch.c\ndiff --git a/builtin-bundle.c b/builtin/bundle.c\nsimilarity index 100%\nrename from builtin-bundle.c\nrename to builtin/bundle.c\ndiff --git a/builtin-cat-file.c b/builtin/cat-file.c\nsimilarity index 100%\nrename from builtin-cat-file.c\nrename to builtin/cat-file.c\ndiff --git a/builtin-check-attr.c b/builtin/check-attr.c\nsimilarity index 100%\nrename from builtin-check-attr.c\nrename to builtin/check-attr.c\ndiff --git a/builtin-check-ref-format.c b/builtin/check-ref-format.c\nsimilarity index 100%\nrename from builtin-check-ref-format.c\nrename to builtin/check-ref-format.c\ndiff --git a/builtin-checkout-index.c b/builtin/checkout-index.c\nsimilarity index 100%\nrename from builtin-checkout-index.c\nrename to builtin/checkout-index.c\ndiff --git a/builtin-checkout.c b/builtin/checkout.c\nsimilarity index 100%\nrename from builtin-checkout.c\nrename to builtin/checkout.c\ndiff --git a/builtin-clean.c b/builtin/clean.c\nsimilarity index 100%\nrename from builtin-clean.c\nrename to builtin/clean.c\ndiff --git a/builtin-clone.c b/builtin/clone.c\nsimilarity index 100%\nrename from builtin-clone.c\nrename to builtin/clone.c\ndiff --git a/builtin-commit-tree.c b/builtin/commit-tree.c\nsimilarity index 100%\nrename from builtin-commit-tree.c\nrename to builtin/commit-tree.c\ndiff --git a/builtin-commit.c b/builtin/commit.c\nsimilarity index 100%\nrename from builtin-commit.c\nrename to builtin/commit.c\ndiff --git a/builtin-config.c b/builtin/config.c\nsimilarity index 100%\nrename from builtin-config.c\nrename to builtin/config.c\ndiff --git a/builtin-count-objects.c b/builtin/count-objects.c\nsimilarity index 100%\nrename from builtin-count-objects.c\nrename to builtin/count-objects.c\ndiff --git a/builtin-describe.c b/builtin/describe.c\nsimilarity index 100%\nrename from builtin-describe.c\nrename to builtin/describe.c\ndiff --git a/builtin-diff-files.c b/builtin/diff-files.c\nsimilarity index 100%\nrename from builtin-diff-files.c\nrename to builtin/diff-files.c\ndiff --git a/builtin-diff-index.c b/builtin/diff-index.c\nsimilarity index 100%\nrename from builtin-diff-index.c\nrename to builtin/diff-index.c\ndiff --git a/builtin-diff-tree.c b/builtin/diff-tree.c\nsimilarity index 100%\nrename from builtin-diff-tree.c\nrename to builtin/diff-tree.c\ndiff --git a/builtin-diff.c b/builtin/diff.c\nsimilarity index 100%\nrename from builtin-diff.c\nrename to builtin/diff.c\ndiff --git a/builtin-fast-export.c b/builtin/fast-export.c\nsimilarity index 100%\nrename from builtin-fast-export.c\nrename to builtin/fast-export.c\ndiff --git a/builtin-fetch-pack.c b/builtin/fetch-pack.c\nsimilarity index 100%\nrename from builtin-fetch-pack.c\nrename to builtin/fetch-pack.c\ndiff --git a/builtin-fetch.c b/builtin/fetch.c\nsimilarity index 100%\nrename from builtin-fetch.c\nrename to builtin/fetch.c\ndiff --git a/builtin-fmt-merge-msg.c b/builtin/fmt-merge-msg.c\nsimilarity index 100%\nrename from builtin-fmt-merge-msg.c\nrename to builtin/fmt-merge-msg.c\ndiff --git a/builtin-for-each-ref.c b/builtin/for-each-ref.c\nsimilarity index 100%\nrename from builtin-for-each-ref.c\nrename to builtin/for-each-ref.c\ndiff --git a/builtin-fsck.c b/builtin/fsck.c\nsimilarity index 100%\nrename from builtin-fsck.c\nrename to builtin/fsck.c\ndiff --git a/builtin-gc.c b/builtin/gc.c\nsimilarity index 100%\nrename from builtin-gc.c\nrename to builtin/gc.c\ndiff --git a/builtin-grep.c b/builtin/grep.c\nsimilarity index 100%\nrename from builtin-grep.c\nrename to builtin/grep.c\ndiff --git a/builtin-hash-object.c b/builtin/hash-object.c\nsimilarity index 100%\nrename from builtin-hash-object.c\nrename to builtin/hash-object.c\ndiff --git a/builtin-help.c b/builtin/help.c\nsimilarity index 100%\nrename from builtin-help.c\nrename to builtin/help.c\ndiff --git a/builtin-index-pack.c b/builtin/index-pack.c\nsimilarity index 100%\nrename from builtin-index-pack.c\nrename to builtin/index-pack.c\ndiff --git a/builtin-init-db.c b/builtin/init-db.c\nsimilarity index 100%\nrename from builtin-init-db.c\nrename to builtin/init-db.c\ndiff --git a/builtin-log.c b/builtin/log.c\nsimilarity index 100%\nrename from builtin-log.c\nrename to builtin/log.c\ndiff --git a/builtin-ls-files.c b/builtin/ls-files.c\nsimilarity index 100%\nrename from builtin-ls-files.c\nrename to builtin/ls-files.c\ndiff --git a/builtin-ls-remote.c b/builtin/ls-remote.c\nsimilarity index 100%\nrename from builtin-ls-remote.c\nrename to builtin/ls-remote.c\ndiff --git a/builtin-ls-tree.c b/builtin/ls-tree.c\nsimilarity index 100%\nrename from builtin-ls-tree.c\nrename to builtin/ls-tree.c\ndiff --git a/builtin-mailinfo.c b/builtin/mailinfo.c\nsimilarity index 100%\nrename from builtin-mailinfo.c\nrename to builtin/mailinfo.c\ndiff --git a/builtin-mailsplit.c b/builtin/mailsplit.c\nsimilarity index 100%\nrename from builtin-mailsplit.c\nrename to builtin/mailsplit.c\ndiff --git a/builtin-merge-base.c b/builtin/merge-base.c\nsimilarity index 100%\nrename from builtin-merge-base.c\nrename to builtin/merge-base.c\ndiff --git a/builtin-merge-file.c b/builtin/merge-file.c\nsimilarity index 100%\nrename from builtin-merge-file.c\nrename to builtin/merge-file.c\ndiff --git a/builtin-merge-index.c b/builtin/merge-index.c\nsimilarity index 100%\nrename from builtin-merge-index.c\nrename to builtin/merge-index.c\ndiff --git a/builtin-merge-ours.c b/builtin/merge-ours.c\nsimilarity index 100%\nrename from builtin-merge-ours.c\nrename to builtin/merge-ours.c\ndiff --git a/builtin-merge-recursive.c b/builtin/merge-recursive.c\nsimilarity index 100%\nrename from builtin-merge-recursive.c\nrename to builtin/merge-recursive.c\ndiff --git a/builtin-merge-tree.c b/builtin/merge-tree.c\nsimilarity index 100%\nrename from builtin-merge-tree.c\nrename to builtin/merge-tree.c\ndiff --git a/builtin-merge.c b/builtin/merge.c\nsimilarity index 100%\nrename from builtin-merge.c\nrename to builtin/merge.c\ndiff --git a/builtin-mktag.c b/builtin/mktag.c\nsimilarity index 100%\nrename from builtin-mktag.c\nrename to builtin/mktag.c\ndiff --git a/builtin-mktree.c b/builtin/mktree.c\nsimilarity index 100%\nrename from builtin-mktree.c\nrename to builtin/mktree.c\ndiff --git a/builtin-mv.c b/builtin/mv.c\nsimilarity index 100%\nrename from builtin-mv.c\nrename to builtin/mv.c\ndiff --git a/builtin-name-rev.c b/builtin/name-rev.c\nsimilarity index 100%\nrename from builtin-name-rev.c\nrename to builtin/name-rev.c\ndiff --git a/builtin-pack-objects.c b/builtin/pack-objects.c\nsimilarity index 100%\nrename from builtin-pack-objects.c\nrename to builtin/pack-objects.c\ndiff --git a/builtin-pack-redundant.c b/builtin/pack-redundant.c\nsimilarity index 100%\nrename from builtin-pack-redundant.c\nrename to builtin/pack-redundant.c\ndiff --git a/builtin-pack-refs.c b/builtin/pack-refs.c\nsimilarity index 100%\nrename from builtin-pack-refs.c\nrename to builtin/pack-refs.c\ndiff --git a/builtin-patch-id.c b/builtin/patch-id.c\nsimilarity index 100%\nrename from builtin-patch-id.c\nrename to builtin/patch-id.c\ndiff --git a/builtin-prune-packed.c b/builtin/prune-packed.c\nsimilarity index 100%\nrename from builtin-prune-packed.c\nrename to builtin/prune-packed.c\ndiff --git a/builtin-prune.c b/builtin/prune.c\nsimilarity index 100%\nrename from builtin-prune.c\nrename to builtin/prune.c\ndiff --git a/builtin-push.c b/builtin/push.c\nsimilarity index 100%\nrename from builtin-push.c\nrename to builtin/push.c\ndiff --git a/builtin-read-tree.c b/builtin/read-tree.c\nsimilarity index 100%\nrename from builtin-read-tree.c\nrename to builtin/read-tree.c\ndiff --git a/builtin-receive-pack.c b/builtin/receive-pack.c\nsimilarity index 100%\nrename from builtin-receive-pack.c\nrename to builtin/receive-pack.c\ndiff --git a/builtin-reflog.c b/builtin/reflog.c\nsimilarity index 100%\nrename from builtin-reflog.c\nrename to builtin/reflog.c\ndiff --git a/builtin-remote.c b/builtin/remote.c\nsimilarity index 100%\nrename from builtin-remote.c\nrename to builtin/remote.c\ndiff --git a/builtin-replace.c b/builtin/replace.c\nsimilarity index 100%\nrename from builtin-replace.c\nrename to builtin/replace.c\ndiff --git a/builtin-rerere.c b/builtin/rerere.c\nsimilarity index 100%\nrename from builtin-rerere.c\nrename to builtin/rerere.c\ndiff --git a/builtin-reset.c b/builtin/reset.c\nsimilarity index 100%\nrename from builtin-reset.c\nrename to builtin/reset.c\ndiff --git a/builtin-rev-list.c b/builtin/rev-list.c\nsimilarity index 100%\nrename from builtin-rev-list.c\nrename to builtin/rev-list.c\ndiff --git a/builtin-rev-parse.c b/builtin/rev-parse.c\nsimilarity index 100%\nrename from builtin-rev-parse.c\nrename to builtin/rev-parse.c\ndiff --git a/builtin-revert.c b/builtin/revert.c\nsimilarity index 100%\nrename from builtin-revert.c\nrename to builtin/revert.c\ndiff --git a/builtin-rm.c b/builtin/rm.c\nsimilarity index 100%\nrename from builtin-rm.c\nrename to builtin/rm.c\ndiff --git a/builtin-send-pack.c b/builtin/send-pack.c\nsimilarity index 100%\nrename from builtin-send-pack.c\nrename to builtin/send-pack.c\ndiff --git a/builtin-shortlog.c b/builtin/shortlog.c\nsimilarity index 100%\nrename from builtin-shortlog.c\nrename to builtin/shortlog.c\ndiff --git a/builtin-show-branch.c b/builtin/show-branch.c\nsimilarity index 100%\nrename from builtin-show-branch.c\nrename to builtin/show-branch.c\ndiff --git a/builtin-show-ref.c b/builtin/show-ref.c\nsimilarity index 100%\nrename from builtin-show-ref.c\nrename to builtin/show-ref.c\ndiff --git a/builtin-stripspace.c b/builtin/stripspace.c\nsimilarity index 100%\nrename from builtin-stripspace.c\nrename to builtin/stripspace.c\ndiff --git a/builtin-symbolic-ref.c b/builtin/symbolic-ref.c\nsimilarity index 100%\nrename from builtin-symbolic-ref.c\nrename to builtin/symbolic-ref.c\ndiff --git a/builtin-tag.c b/builtin/tag.c\nsimilarity index 100%\nrename from builtin-tag.c\nrename to builtin/tag.c\ndiff --git a/builtin-tar-tree.c b/builtin/tar-tree.c\nsimilarity index 100%\nrename from builtin-tar-tree.c\nrename to builtin/tar-tree.c\ndiff --git a/builtin-unpack-file.c b/builtin/unpack-file.c\nsimilarity index 100%\nrename from builtin-unpack-file.c\nrename to builtin/unpack-file.c\ndiff --git a/builtin-unpack-objects.c b/builtin/unpack-objects.c\nsimilarity index 100%\nrename from builtin-unpack-objects.c\nrename to builtin/unpack-objects.c\ndiff --git a/builtin-update-index.c b/builtin/update-index.c\nsimilarity index 100%\nrename from builtin-update-index.c\nrename to builtin/update-index.c\ndiff --git a/builtin-update-ref.c b/builtin/update-ref.c\nsimilarity index 100%\nrename from builtin-update-ref.c\nrename to builtin/update-ref.c\ndiff --git a/builtin-update-server-info.c b/builtin/update-server-info.c\nsimilarity index 100%\nrename from builtin-update-server-info.c\nrename to builtin/update-server-info.c\ndiff --git a/builtin-upload-archive.c b/builtin/upload-archive.c\nsimilarity index 100%\nrename from builtin-upload-archive.c\nrename to builtin/upload-archive.c\ndiff --git a/builtin-var.c b/builtin/var.c\nsimilarity index 100%\nrename from builtin-var.c\nrename to builtin/var.c\ndiff --git a/builtin-verify-pack.c b/builtin/verify-pack.c\nsimilarity index 100%\nrename from builtin-verify-pack.c\nrename to builtin/verify-pack.c\ndiff --git a/builtin-verify-tag.c b/builtin/verify-tag.c\nsimilarity index 100%\nrename from builtin-verify-tag.c\nrename to builtin/verify-tag.c\ndiff --git a/builtin-write-tree.c b/builtin/write-tree.c\nsimilarity index 100%\nrename from builtin-write-tree.c\nrename to builtin/write-tree.c\n"},{"id":"135351","messageId":"7v7hq46gwe.fsf@alter.siamese.dyndns.org","threadId":"22715","inReplyTo":"alpine.LFD.2.00.1002220830550.4141@localhost.localdomain","subject":"Re: [RFD] Deepen the git directory structure a bit.","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-02-22T22:32:17Z","receivedAt":"2010-02-22T22:32:17Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"I'll queue with a trivial addition of \"rm builtin/*.o\" to the \"make clean\"\ntarget.  I am not looking forward to merging the result of this with other\ntopics, though... X-<.\n"},{"id":"135670","messageId":"4B8657EC.8060302@googlemail.com","threadId":"22715","inReplyTo":"7v7hq46gwe.fsf@alter.siamese.dyndns.org","subject":"Re: [RFD] Deepen the git directory structure a bit.","fromName":"Fabian Kössel","fromEmail":"mok4sin@googlemail.com","sentAt":"2010-02-25T10:58:52Z","receivedAt":"2010-02-25T10:58:52Z","isPatch":false,"sender":{"key":"mok4sin@googlemail.com","avatar":null},"body":"On 22.02.2010 23:32, Junio C Hamano wrote:\n> I'll queue with a trivial addition of \"rm builtin/*.o\" to the \"make\nclean\"\n> target.  I am not looking forward to merging the result of this with\nother\n> topics, though... X-<.\n\nJust out of curiosity, how do you actually merge such a relatively big\nrename with other branches?\n\nI haven't found a pleasant way yet to merge rename+modification in one\nbranch and modification on an old path in another branch.\n\n\nThere is git file-merge theirs base ours . But it only seems to take\nfilenames and no git object specifications. It would be very handy if\nsomething like\n\ngit file-merge bfile HEAD^:afile afile\n\nwould be possible.\n\n\nFor clearification, here an example\n\n\necho \"First line\" > afile\n\ngit add .\ngit commit -m \"First commit in master\"\n\ngit checkout -b mybranch\n\necho \"Second line in mybranch\" >> afile\ngit mv afile bfile\n\ngit commit -a -m \"Change and rename in mybranch\"\n\ngit checkout master\n\necho \"Changed first line in master\" > afile\n\ngit commit -a -m \"changed afile\"\n\ngit merge mybranch\n\n\nRegards\n\nFabian\n"},{"id":"135789","messageId":"7vzl2va2lo.fsf@alter.siamese.dyndns.org","threadId":"22715","inReplyTo":"4B8657EC.8060302@googlemail.com","subject":"Re: [RFD] Deepen the git directory structure a bit.","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-02-27T01:28:51Z","receivedAt":"2010-02-27T01:28:51Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Fabian Kössel <mok4sin@googlemail.com> writes:\n\n> On 22.02.2010 23:32, Junio C Hamano wrote:\n>> I'll queue with a trivial addition of \"rm builtin/*.o\" to the \"make\n> clean\"\n>> target.  I am not looking forward to merging the result of this with\n> other\n>> topics, though... X-<.\n>\n> Just out of curiosity, how do you actually merge such a relatively big\n> rename with other branches?\n\nFor git.git, existing files are not so troublesome.  merge-recursive knows\nhow to handle renames, so does \"am -3\", but the latter is tricky when the\ncontributor based a patch on some unknown vintage of the source.\n\nA topic with a new builtin command is a bit problematic and no mechanical\nmerge would help. I suspect that no other SCM would be able to either.\n\n - A topic that adds builtin-frotz.c has an entry that describes how to\n   build builtin-frotz.o in Makefile, somewhere near Linus's topic changes\n   an existing builtin-nitfol.o to builtin/nitfol.o.  The topic would have\n   added the new target already, and then we are merging Linus's topic.\n   The merge will conflict.  Every time I rebuild 'pu', this conflict will\n   reappear over and over.\n\n   But once the conflict is resolved, rerere will remember it for me, so\n   this is not a big problem.\n\n - A new builtin-frotz.c file in such a topic is more problematic.\n   Linus's patch does not know anything about it, so it will merge\n   cleanly, but the merge will not move it to builtin/frotz.c; this needs\n   to be fixed manually as an evil merge.\n\n   I have automated such an evil merge so that I can rebuild 'pu' without\n   manual intervention.\n"}]}