{"push_id":949957842,"size":45,"distinct_size":45,"ref":"refs/heads/pu","head":"38e51ca2149dd64ab8afbec94f6783dd35033250","before":"b07009c29585f2d21c3a575eb20acc67042bf8ec","commits":[{"sha":"618244e160cb0777bc8d41055f7de0192b10ea0f","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"worktree: stop supporting moving worktrees manually\n\nThe current update_linked_gitdir() has a bug that can create \"gitdir\"\nfile in non-multi-worktree setup. Worse, sometimes it can write relative\npath to \"gitdir\" file, which will not work (e.g. \"git worktree list\"\nwill display the worktree's location incorrectly)\n\nInstead of fixing this, we step back a bit. The original design was\nprobably not well thought out. For now, if the user manually moves a\nworktree, they have to fix up \"gitdir\" file manually or the worktree\nwill get pruned.\n\nHelped-by: Eric Sunshine <sunshine@sunshineco.com>\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/618244e160cb0777bc8d41055f7de0192b10ea0f"},{"sha":"cf6c964b1342edc7c5f07a6da9ec83a1e7b61f2a","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'nd/do-not-move-worktree-manually' into jch\n\n\"git worktree\" had a broken code that attempted to auto-fix\npossible inconsistency that results from end-users moving a\nworktree to different places without telling Git (the original\nrepository needs to maintain backpointers to its worktrees, but\n\"mv\" run by end-users who are not familiar with that fact will\nobviously not adjust them), which actually made things worse\nwhen triggered.\n\n* nd/do-not-move-worktree-manually:\n  worktree: stop supporting moving worktrees manually\n  worktree.c: fix indentation","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/cf6c964b1342edc7c5f07a6da9ec83a1e7b61f2a"},{"sha":"7ae760b50e082930417a69f9b88b0c70c039165f","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'lv/add-doc-working-tree' into jch\n\n* lv/add-doc-working-tree:\n  git-add doc: do not say working directory when you mean working tree","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/7ae760b50e082930417a69f9b88b0c70c039165f"},{"sha":"c4c5f0ab85a2adf514b9597da899610ea0fadf66","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'nd/diff-with-path-params' into jch\n\n* nd/diff-with-path-params:\n  diff: make -O and --output work in subdirectory\n  diff-no-index: do not take a redundant prefix argument","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/c4c5f0ab85a2adf514b9597da899610ea0fadf66"},{"sha":"e14c68c2598e0ea320c2b54842a914d84149112c","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'dt/unpack-compare-entry-optim' into jch\n\n* dt/unpack-compare-entry-optim:\n  unpack-trees: fix accidentally quadratic behavior","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/e14c68c2598e0ea320c2b54842a914d84149112c"},{"sha":"ba3cac753723969d23ac7ae98637dc9e29c31beb","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'mk/asciidoctor-bq-workaround' into jch\n\n* mk/asciidoctor-bq-workaround:\n  Documentation: remove unnecessary backslashes","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/ba3cac753723969d23ac7ae98637dc9e29c31beb"},{"sha":"cf266ed445b00632ec88952252891459305c2145","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'tb/complete-word-diff-regex' into jch\n\n* tb/complete-word-diff-regex:\n  completion: complete \"diff --word-diff-regex=\"","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/cf266ed445b00632ec88952252891459305c2145"},{"sha":"486c1c199b59ba4990b6b82b77c9c4caa5c4e6ed","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'tg/ls-remote-symref' into jch\n\n* tg/ls-remote-symref:\n  ls-remote: add support for showing symrefs\n  ls-remote: use parse-options api\n  ls-remote: fix synopsis\n  ls-remote: document --refs option\n  ls-remote: document --quiet option","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/486c1c199b59ba4990b6b82b77c9c4caa5c4e6ed"},{"sha":"5495a856e0ee8d536e42fb558e086dee83ea5d2c","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'jk/notes-merge-from-anywhere' into jch\n\n\"git notes merge\" used to limit the source of the merged notes tree\nto somewhere under refs/notes/ hierarchy, which was too limiting\nwhen inventing a workflow to exchange notes with remote\nrepositories using remote-tracking notes trees (located in e.g.\nrefs/remote-notes/ or somesuch).\n\n* jk/notes-merge-from-anywhere:\n  notes: allow merging from arbitrary references","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/5495a856e0ee8d536e42fb558e086dee83ea5d2c"},{"sha":"5ac492a1f618e9dbb6d5085a1903027dc875a5aa","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'tb/ls-files-eol' into jch\n\nAdd options to ls-files to help diagnose end-of-line problems.\n\n* tb/ls-files-eol:\n  ls-files: add eol diagnostics","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/5ac492a1f618e9dbb6d5085a1903027dc875a5aa"},{"sha":"ffd036b1286687589f5ce5513ee69c06ee53691e","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"clean: make is_git_repository a public function\n\nWe have always had is_git_directory(), for looking at a\nspecific directory to see if it contains a git repo. In\n0179ca7 (clean: improve performance when removing lots of\ndirectories, 2015-06-15), we added is_git_repository() which\nchecks for a non-bare repository by looking at its \".git\"\nentry.\n\nHowever, the fix in 0179ca7 needs to be applied other\nplaces, too. Let's make this new helper globally available.\nWe need to give it a better name, though, to avoid confusion\nwith is_git_directory(). This patch does that, documents\nboth functions with a comment to reduce confusion, and\nremoves the clean-specific references in the comments.\n\nBased-on-a-patch-by: Andreas Krey <a.krey@gmx.de>\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/ffd036b1286687589f5ce5513ee69c06ee53691e"},{"sha":"a2d5156c2b0e6dbffc216b4a673156487a2f8b65","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"resolve_gitlink_ref: ignore non-repository paths\n\nWhen we want to look up a submodule ref, we use\nget_ref_cache(path) to find or auto-create its ref cache.\nBut if we feed a path that isn't actually a git repository,\nwe blindly create the ref cache, and then may die deeper in\nthe code when we try to access it. This is a problem because\nmany callers speculatively feed us a path that looks vaguely\nlike a repository, and expect us to tell them when it is\nnot.\n\nThis patch teaches resolve_gitlink_ref to reject\nnon-repository paths without creating a ref_cache. This\navoids the die(), and also performs better if you have a\nlarge number of these faux-submodule directories (because\nthe ref_cache lookup is linear, under the assumption that\nthere won't be a large number of submodules).\n\nTo accomplish this, we also break get_ref_cache into two\npieces: the lookup and auto-creation (the latter is lumped\ninto create_ref_cache). This lets us first cheaply ask our\ncache \"is it a submodule we know about?\" If so, we can avoid\nrepeating our filesystem lookup. So lookups of real\nsubmodules are not penalized; they examine the submodule's\n.git directory only once.\n\nThe test in t3000 demonstrates a case where this improves\ncorrectness (we used to just die). The new perf case in\np7300 shows off the speed improvement in an admittedly\npathological repository:\n\nTest                  HEAD^               HEAD\n----------------------------------------------------------------\n7300.4: ls-files -o   66.97(66.15+0.87)   0.33(0.08+0.24) -99.5%\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/a2d5156c2b0e6dbffc216b4a673156487a2f8b65"},{"sha":"1d094db936331abc42d859269181272a8539c7ae","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"t6300: use test_atom for some un-modern tests\n\nBecause this script has to test so many formatters, we have\nthe nice \"test_atom\" helper, but we don't use it\nconsistently. Let's do so. This is shorter, gets rid of some\ntests that have their \"expected\" setup outside of a\ntest_expect_success block, and lets us organize the changes\nbetter (e.g., putting \"refname:short\" near \"refname\").\n\nWe also expand the \"%(push)\" tests a little to match the\n\"%(upstream)\" ones.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/1d094db936331abc42d859269181272a8539c7ae"},{"sha":"8e33f44a1578dfe6134b19068db8ad7ef86e9f74","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"tag: do not show ambiguous tag names as \"tags/foo\"\n\nSince b7cc53e9 (tag.c: use 'ref-filter' APIs, 2015-07-11),\ngit-tag has started showing tags with ambiguous names (i.e.,\nwhen both \"heads/foo\" and \"tags/foo\" exists) as \"tags/foo\"\ninstead of just \"foo\". This is both:\n\n  - pointless; the output of \"git tag\" includes only\n    refs/tags, so we know that \"foo\" means the one in\n    \"refs/tags\".\n\nand\n\n  - ambiguous; in the original output, we know that the line\n    \"foo\" means that \"refs/tags/foo\" exists. In the new\n    output, it is unclear whether we mean \"refs/tags/foo\" or\n    \"refs/tags/tags/foo\".\n\nThe reason this happens is that commit b7cc53e9 switched\ngit-tag to use ref-filter's \"%(refname:short)\" output\nformatting, which was adapted from for-each-ref. This more\ngeneral code does not know that we care only about tags, and\nuses shorten_unambiguous_ref to get the short-name. We need\nto tell it that we care only about \"refs/tags/\", and it\nshould shorten with respect to that value.\n\nIn theory, the ref-filter code could figure this out by us\npassing FILTER_REFS_TAGS. But there are two complications\nthere:\n\n  1. The handling of refname:short is deep in formatting\n     code that does not even have our ref_filter struct, let\n     alone the arguments to the filter_ref struct.\n\n  2. In git v2.7.0, we expose the formatting language to the\n     user. If we follow this path, it will mean that\n     \"%(refname:short)\" behaves differently for \"tag\" versus\n     \"for-each-ref\" (including \"for-each-ref refs/tags/\"),\n     which can lead to confusion.\n\nInstead, let's add a new modifier to the formatting\nlanguage, \"strip\", to remove a specific set of prefix\ncomponents. This fixes \"git tag\", and lets users invoke the\nsame behavior from their own custom formats (for \"tag\" or\n\"for-each-ref\") while leaving \":short\" with its same\nconsistent meaning in all places.\n\nWe introduce a test in t7004 for \"git tag\", which fails\nwithout this patch. We also add a similar test in t3203 for\n\"git branch\", which does not actually fail. But since it is\nlikely that \"branch\" will eventually use the same formatting\ncode, the test helps defend against future regressions.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/8e33f44a1578dfe6134b19068db8ad7ef86e9f74"},{"sha":"113e6413187c65a9fbf2b845a1fb31c7d17c0755","author":{"email":"58cc993db606fd7043084d51c23db751557f1001@gmail.com","name":"Christian Couder"},"message":"update-index: use enum for untracked cache options\n\nHelped-by: Duy Nguyen <pclouds@gmail.com>\nSigned-off-by: Christian Couder <chriscool@tuxfamily.org>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/113e6413187c65a9fbf2b845a1fb31c7d17c0755"},{"sha":"eaab83d0e574c9f3440a2364a7975f9ffe75f188","author":{"email":"58cc993db606fd7043084d51c23db751557f1001@gmail.com","name":"Christian Couder"},"message":"update-index: add --test-untracked-cache\n\nIt is nice to just be able to test if untracked cache is\nsupported without enabling it.\n\nHelped-by: David Turner <dturner@twopensource.com>\nSigned-off-by: Christian Couder <chriscool@tuxfamily.org>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/eaab83d0e574c9f3440a2364a7975f9ffe75f188"},{"sha":"6d19db1491f1f48c5112f460e1f2d2e359e113c9","author":{"email":"58cc993db606fd7043084d51c23db751557f1001@gmail.com","name":"Christian Couder"},"message":"update-index: add untracked cache notifications\n\nAttempting to flip the untracked-cache feature on for a random index\nfile with\n\n    cd /random/unrelated/place\n    git --git-dir=/somewhere/else/.git update-index --untracked-cache\n\nwould not work as you might expect. Because flipping the feature on\nin the index also records the location of the corresponding working\ntree (/random/unrelated/place in the above example), when the index\nis subsequently used to keep track of files in the working tree in\n/somewhere/else, the feature is disabled.\n\nWith this patch \"git update-index --[test-]untracked-cache\" tells the\nuser in which directory tests are performed. This makes it easy to\nspot any problem.\n\nAlso in verbose mode, let's tell the user when the cache is enabled\nor disabled.\n\nHelped-by: Duy Nguyen <pclouds@gmail.com>\nSigned-off-by: Christian Couder <chriscool@tuxfamily.org>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/6d19db1491f1f48c5112f460e1f2d2e359e113c9"},{"sha":"e7c0c5354be01bedb4c6f0ad3b095ff0bfefa272","author":{"email":"58cc993db606fd7043084d51c23db751557f1001@gmail.com","name":"Christian Couder"},"message":"update-index: move 'uc' var declaration\n\nSigned-off-by: Christian Couder <chriscool@tuxfamily.org>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/e7c0c5354be01bedb4c6f0ad3b095ff0bfefa272"},{"sha":"4a4ca4796df6b81d5995f31e87e9e6a64c2b889d","author":{"email":"58cc993db606fd7043084d51c23db751557f1001@gmail.com","name":"Christian Couder"},"message":"dir: add {new,add}_untracked_cache()\n\nFactor out code into new_untracked_cache() and\nadd_untracked_cache(), which will be used\nin later commits.\n\nHelped-by: Eric Sunshine <sunshine@sunshineco.com>\nSigned-off-by: Christian Couder <chriscool@tuxfamily.org>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/4a4ca4796df6b81d5995f31e87e9e6a64c2b889d"},{"sha":"07b29bfd8d3de9a16c1c93e285b6980ca6b77b45","author":{"email":"58cc993db606fd7043084d51c23db751557f1001@gmail.com","name":"Christian Couder"},"message":"dir: add remove_untracked_cache()\n\nFactor out code into remove_untracked_cache(), which will be used\nin a later commit.\n\nSigned-off-by: Christian Couder <chriscool@tuxfamily.org>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/sunny256/git/commits/07b29bfd8d3de9a16c1c93e285b6980ca6b77b45"}]}