{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":135437869,"defaultBranch":"master","name":"git","ownerLogin":"gitgitgadget","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2018-05-30T12:14:54.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/39071191?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1727505360.0","currentOid":""},"activityList":{"items":[{"before":"916f9c759511807e40e1bc2afb36b60cc36b057a","after":"12dfc2475ce4808df696fb67fc71a66793f78f06","ref":"refs/heads/ps/leakfixes-part-7","pushedAt":"2024-09-28T06:36:00.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"diffcore-break: fix leaking filespecs when merging broken pairs\n\nWhen merging file pairs after they have been broken up we queue a new\nfile pair and discard the broken-up ones. The newly-queued file pair\nreuses one filespec of the broken up pairs each, where the respective\nother filespec gets discarded. But we only end up freeing the filespec's\ndata, not the filespec itself, and thus leak memory.\n\nFix these leaks by using `free_filespec()` instead.\n\nSigned-off-by: Patrick Steinhardt \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"diffcore-break: fix leaking filespecs when merging broken pairs"}},{"before":"30ff8edd7c1e511d52948861939a4a8433a16158","after":"1b9e9be8b4694ea52d8aae93f311b1607c3576b7","ref":"refs/heads/tb/weak-sha1-for-tail-sum","pushedAt":"2024-09-28T06:36:00.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"csum-file.c: use unsafe SHA-1 implementation when available\n\nUpdate hashwrite() and friends to use the unsafe_-variants of hashing\nfunctions, calling for e.g., \"the_hash_algo->unsafe_update_fn()\" instead\nof \"the_hash_algo->update_fn()\".\n\nThese callers only use the_hash_algo to produce a checksum, which we\ndepend on for data integrity, but not for cryptographic purposes, so\nthese callers are safe to use the unsafe (non-collision detecting) SHA-1\nimplementation.\n\nTo time this, I took a freshly packed copy of linux.git, and ran the\nfollowing with and without the OPENSSL_SHA1_UNSAFE=1 build-knob. Both\nversions were compiled with -O3:\n\n $ git for-each-ref --format='%(objectname)' refs/heads refs/tags >in\n $ valgrind --tool=callgrind ~/src/git/git-pack-objects \\\n --revs --stdout --all-progress --use-bitmap-index /dev/null\n\nWithout OPENSSL_SHA1_UNSAFE=1 (that is, using the collision-detecting\nSHA-1 implementation for both cryptographic and non-cryptographic\npurposes), we spend a significant amount of our instruction count in\nhashwrite():\n\n $ callgrind_annotate --inclusive=yes | grep hashwrite | head -n1\n 159,998,868,413 (79.42%) /home/ttaylorr/src/git/csum-file.c:hashwrite [/home/ttaylorr/src/git/git-pack-objects]\n\n, and the resulting \"clone\" takes 19.219 seconds of wall clock time,\n18.94 seconds of user time and 0.28 seconds of system time.\n\nCompiling with OPENSSL_SHA1_UNSAFE=1, we spend ~60% fewer instructions\nin hashwrite():\n\n $ callgrind_annotate --inclusive=yes | grep hashwrite | head -n1\n 59,164,001,176 (58.79%) /home/ttaylorr/src/git/csum-file.c:hashwrite [/home/ttaylorr/src/git/git-pack-objects]\n\n, and generate the resulting \"clone\" much faster, in only 11.597 seconds\nof wall time, 11.37 seconds of user time, and 0.23 seconds of system\ntime, for a ~40% speed-up.\n\nSigned-off-by: Taylor Blau \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"csum-file.c: use unsafe SHA-1 implementation when available"}},{"before":null,"after":"9c4c84090180b04b46ee0514acadf90f48598f6d","ref":"refs/heads/jc/doc-discarding-stalled-topics","pushedAt":"2024-09-28T06:36:00.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"howto-maintain-git: discarding inactive topics\n\nWhen a patch series happened to look interesting to the maintainer\nbut is not ready for 'next', it is applied on a topic branch and\nmerged to the 'seen' branch to keep an eye on it. In an ideal\nworld, the participants give reviews and the original author\nresponds to the reviews, and such iterations may produce newer\nversions of the patch series, and at some point, a concensus is\nformed that the latest round is good enough for 'next'. Then the\ntopic is merged to 'next' for inclusion in a future release.\n\nIn a much less ideal world we live in, however, a topic sometimes\nget stalled. The original author may not respond to hanging review\ncomments, may promise an update will be sent but does not manage to\ndo so, nobody talks about the topic on the list and nobody builds\nupon it, etc.\n\nFollowing the recent trend to document and give more transparency to\nthe decision making process, let's set a deadline to keep a topic\nstill alive, and actively discard those that are inactive for a long\nperiod of time.\n\nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"howto-maintain-git: discarding inactive topics"}},{"before":null,"after":"ef30c4557c1f10beb138a685804e7e69bf88ea96","ref":"refs/heads/ej/cat-file-remote-object-info","pushedAt":"2024-09-28T06:36:00.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"cat-file: add remote-object-info to batch-command\n\nSince the `info` command in cat-file --batch-command prints object info\nfor a given object, it is natural to add another command in cat-file\n--batch-command to print object info for a given object from a remote.\nAdd `remote-object-info` to cat-file --batch-command.\n\nWhile `info` takes object ids one at a time, this creates overhead when\nmaking requests to a server so `remote-object-info` instead can take\nmultiple object ids at once.\n\ncat-file --batch-command is generally implemented in the following\nmanner:\n\n - Receive and parse input from user\n - Call respective function attached to command\n - Get object info, print object info\n\nIn --buffer mode, this changes to:\n\n - Receive and parse input from user\n - Store respective function attached to command in a queue\n - After flush, loop through commands in queue\n - Call respective function attached to command\n - Get object info, print object info\n\nNotice how the getting and printing of object info is accomplished one\nat a time. As described above, this creates a problem for making\nrequests to a server. Therefore, `remote-object-info` is implemented in\nthe following manner:\n\n - Receive and parse input from user\n If command is `remote-object-info`:\n - Get object info from remote\n - Loop through and print each object info\n Else:\n - Call respective function attached to command\n - Parse input, get object info, print object info\n\nAnd finally for --buffer mode `remote-object-info`:\n - Receive and parse input from user\n - Store respective function attached to command in a queue\n - After flush, loop through commands in queue:\n If command is `remote-object-info`:\n - Get object info from remote\n - Loop through and print each object info\n Else:\n - Call respective function attached to command\n - Get object info, print object info\n\nTo summarize, `remote-object-info` gets object info from the remote and\nthen loop through the object info passed in, print the info.\n\nIn order for remote-object-info to avoid remote communication overhead\nin the non-buffer mode, the objects are passed in as such:\n\nremote-object-info ... \n\nrather than\n\nremote-object-info \nremote-object-info \n...\nremote-object-info \n\nHelped-by: Jonathan Tan \nHelped-by: Christian Couder \nSigned-off-by: Calvin Wan \nSigned-off-by: Eric Ju \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"cat-file: add remote-object-info to batch-command"}},{"before":"e670bccf7ea22d98afd1d85ab892f66a87cef034","after":"c52b418c92d127f8efa6c22f3765e715a23f2229","ref":"refs/heads/next","pushedAt":"2024-09-27T22:25:07.000Z","pushType":"push","commitsCount":54,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"Merge branch 'jk/http-leakfixes' into next\n\nLeakfixes.\n\n* jk/http-leakfixes: (28 commits)\n http-push: clean up local_refs at exit\n http-push: clean up loose request when falling back to packed\n http-push: clean up objects list\n http-push: free xml_ctx.cdata after use\n http-push: free remote_ls_ctx.dentry_name\n http-push: free transfer_request strbuf\n http-push: free transfer_request dest field\n http-push: free curl header lists\n http-push: free repo->url string\n http-push: clear refspecs before exiting\n http-walker: free fake packed_git list\n remote-curl: free HEAD ref with free_one_ref()\n http: stop leaking buffer in http_get_info_packs()\n http: call git_inflate_end() when releasing http_object_request\n http: fix leak of http_object_request struct\n http: fix leak when redacting cookies from curl trace\n transport-helper: fix leak of dummy refs_list\n fetch-pack: clear pack lockfiles list\n fetch: free \"raw\" string when shrinking refspec\n transport-helper: fix strbuf leak in push_refs_with_push()\n ...","shortMessageHtmlLink":"Merge branch 'jk/http-leakfixes' into next"}},{"before":"2291cb7bea04517c8f3293962d0d816a590c700d","after":"deeeb55529971f6b2ef550fa352837445ec8e39a","ref":"refs/heads/seen","pushedAt":"2024-09-27T22:25:05.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"Merge branch 'ej/cat-file-remote-object-info' into seen\n\n* ej/cat-file-remote-object-info:\n cat-file: add remote-object-info to batch-command\n cat-file: add declaration of variable i inside its for loop\n transport: add client support for object-info\n serve: advertise object-info feature\n fetch-pack: move fetch initialization\n fetch-pack: refactor packet writing","shortMessageHtmlLink":"Merge branch 'ej/cat-file-remote-object-info' into seen"}},{"before":"e261f169bdc0d967eadb9c1eae13d86b6873c213","after":"e670bccf7ea22d98afd1d85ab892f66a87cef034","ref":"refs/heads/next","pushedAt":"2024-09-27T16:30:38.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"Merge branch 'ds/sparse-checkout-expansion-advice' into next\n\nWhen \"git sparse-checkout disable\" turns a sparse checkout into a\nregular checkout, the index is fully expanded. This totally\nexpected behaviour however had an \"oops, we are expanding the\nindex\" advice message, which has been corrected.\n\n* ds/sparse-checkout-expansion-advice:\n sparse-checkout: disable advice in 'disable'","shortMessageHtmlLink":"Merge branch 'ds/sparse-checkout-expansion-advice' into next"}},{"before":"6eb3a4ee529b72c5b254af91de874b80fea89070","after":"2291cb7bea04517c8f3293962d0d816a590c700d","ref":"refs/heads/seen","pushedAt":"2024-09-27T16:30:36.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"Merge branch 'ja/doc-synopsis-markup' into seen\n\nThe way AsciiDoc is used for SYNOPSIS part of the manual pages has\nbeen revamped. The sources, at least for the simple cases, got\nvastly pleasant to work with.\n\nReverted out of 'next', and then replaced.\n\n* ja/doc-synopsis-markup:\n doc: apply synopsis simplification on git-clone and git-init\n doc: update the guidelines to reflect the current formatting rules\n doc: introduce a synopsis typesetting","shortMessageHtmlLink":"Merge branch 'ja/doc-synopsis-markup' into seen"}},{"before":"4e49940f23354c9358a95b86ce17d7386b172d63","after":"3211108d7cef51774a90b1e4112b9e297b7a38ad","ref":"refs/heads/todo","pushedAt":"2024-09-26T16:39:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"What's cooking (2024/09 #11)","shortMessageHtmlLink":"What's cooking (2024/09 #11)"}},{"before":"caf1b0c932622a79da5dc26acbfbcfe828fa7bc8","after":"e261f169bdc0d967eadb9c1eae13d86b6873c213","ref":"refs/heads/next","pushedAt":"2024-09-26T16:38:45.000Z","pushType":"push","commitsCount":7,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"Sync with Git 2.47-rc0","shortMessageHtmlLink":"Sync with Git 2.47-rc0"}},{"before":"c0a1d61878c7f82b7bb0be37dd0f4d5f2e235289","after":"6eb3a4ee529b72c5b254af91de874b80fea89070","ref":"refs/heads/seen","pushedAt":"2024-09-26T16:38:45.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"Merge branch 'ja/doc-synopsis-markup' into seen\n\nThe way AsciiDoc is used for SYNOPSIS part of the manual pages has\nbeen revamped. The sources, at least for the simple cases, got\nvastly pleasant to work with.\n\nReverted out of 'next', and then replaced.\n\n* ja/doc-synopsis-markup:\n doc: apply synopsis simplification on git-clone and git-init\n doc: update the guidelines to reflect the current formatting rules\n doc: introduce a synopsis typesetting","shortMessageHtmlLink":"Merge branch 'ja/doc-synopsis-markup' into seen"}},{"before":"a116aba5d54bf44c6fc27fa1a4c2431d53cf8ff5","after":"3857aae53f3633b7de63ad640737c657387ae0c6","ref":"refs/heads/master","pushedAt":"2024-09-26T16:38:44.000Z","pushType":"push","commitsCount":11,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"Git 2.47-rc0\n\nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"Git 2.47-rc0"}},{"before":"a116aba5d54bf44c6fc27fa1a4c2431d53cf8ff5","after":"3857aae53f3633b7de63ad640737c657387ae0c6","ref":"refs/heads/main","pushedAt":"2024-09-26T16:38:44.000Z","pushType":"push","commitsCount":11,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"Git 2.47-rc0\n\nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"Git 2.47-rc0"}},{"before":"35097d58f1c51bbdac531e592d7b753ae358afb2","after":"7ffcbafbf32185da7dccb4b3f49b871f24ab58c4","ref":"refs/heads/jk/sendemail-mailmap-doc","pushedAt":"2024-09-26T06:39:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"send-email: document --mailmap and associated configuration\n\n241499aba007 (\"send-email: add mailmap support via sendemail.mailmap and\n--mailmap\", 2024-08-27) added support for --mailmap, and the associated\nsendemail.mailmap.* configuration variables. Add documentation to\nreflect this feature.\n\nFixes: 241499aba007 (\"send-email: add mailmap support via sendemail.mailmap and --mailmap\")\nSigned-off-by: Jacob Keller \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"send-email: document --mailmap and associated configuration"}},{"before":null,"after":"cf1464331b10bb6783243a31ab80a86ac6b2a485","ref":"refs/heads/jk/test-lsan-improvements","pushedAt":"2024-09-26T06:39:40.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"test-lib: check for leak logs after every test\n\nIf you are trying to find and fix leaks in a large test script, it can\nbe overwhelming to see the leak logs for every test at once. The\nprevious commit let you use \"--immediate\" to see the logs after the\nfirst failing test, but this isn't always the first leak. As discussed\nthere, we may see leaks from previous tests that didn't happen to fail.\n\nTo catch those, let's check for any logs that appeared after each test\nsnippet is run, meaning that in a SANITIZE=leak build, any leak is an\nimmediate failure of the test snippet.\n\nThis check is mostly free in non-leak builds (just a \"test -z\"), and\nonly a few extra processes in a leak build, so I don't think the\noverhead should matter (if it does, we could probably optimize for the\ncommon \"no logs\" case without even spending a process).\n\nSigned-off-by: Jeff King \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"test-lib: check for leak logs after every test"}},{"before":null,"after":"f4c768c639566da07fc063fa9b52607f54ac94ee","ref":"refs/heads/jk/http-leakfixes","pushedAt":"2024-09-26T06:39:40.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"http-push: clean up local_refs at exit\n\nWe allocate a list of ref structs from get_local_heads() but never clean\nit up. We should do so before exiting to avoid complaints from the\nleak-checker. Note that we have to initialize it to NULL, because\nthere's one code path that can jump to the cleanup label before we\nassign to it.\n\nFixing this lets us mark t5540 as leak-free.\n\nCuriously building with SANITIZE=leak and gcc does not seem to find this\nproblem, but switching to clang does. It seems like a fairly obvious\nleak, though.\n\nI was curious that the matching remote_refs did not have the same leak.\nBut that is because we store the list in a global variable, so it's\nstill reachable after we exit. Arguably we could treat it the same as\nfuture-proofing, but I didn't bother (now that the script is marked\nleak-free, anybody moving it to a stack variable will notice).\n\nSigned-off-by: Jeff King \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"http-push: clean up local_refs at exit"}},{"before":"091676c1e28123406a49ebcb6fe064114b7f2336","after":"4e49940f23354c9358a95b86ce17d7386b172d63","ref":"refs/heads/todo","pushedAt":"2024-09-25T21:56:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"What's cooking (2024/09 #10)","shortMessageHtmlLink":"What's cooking (2024/09 #10)"}},{"before":"229c0bf0e58ae4ebf0103bdc04a46cb0c360fb69","after":"caf1b0c932622a79da5dc26acbfbcfe828fa7bc8","ref":"refs/heads/next","pushedAt":"2024-09-25T20:14:24.000Z","pushType":"push","commitsCount":10,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"Sync with 'master'","shortMessageHtmlLink":"Sync with 'master'"}},{"before":"6258f68c3c1092c901337895c864073dcdea9213","after":"a116aba5d54bf44c6fc27fa1a4c2431d53cf8ff5","ref":"refs/heads/master","pushedAt":"2024-09-25T20:14:21.000Z","pushType":"push","commitsCount":45,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"The 21st batch\n\nThis pretty much should match what we would have in the upcoming\npreview of 2.47.\n\nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"The 21st batch"}},{"before":"6258f68c3c1092c901337895c864073dcdea9213","after":"a116aba5d54bf44c6fc27fa1a4c2431d53cf8ff5","ref":"refs/heads/main","pushedAt":"2024-09-25T20:14:21.000Z","pushType":"push","commitsCount":45,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"The 21st batch\n\nThis pretty much should match what we would have in the upcoming\npreview of 2.47.\n\nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"The 21st batch"}},{"before":"a2d4c63ec60c589b43227fe3befd58c8bedc38ba","after":"c0a1d61878c7f82b7bb0be37dd0f4d5f2e235289","ref":"refs/heads/seen","pushedAt":"2024-09-25T20:14:21.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"Merge branch 'ja/doc-synopsis-markup' into seen\n\nThe way AsciiDoc is used for SYNOPSIS part of the manual pages has\nbeen revamped. The sources, at least for the simple cases, got\nvastly pleasant to work with.\n\nReverted out of 'next', and then replaced.\n\n* ja/doc-synopsis-markup:\n doc: apply synopsis simplification on git-clone and git-init\n doc: update the guidelines to reflect the current formatting rules\n doc: introduce a synopsis typesetting","shortMessageHtmlLink":"Merge branch 'ja/doc-synopsis-markup' into seen"}},{"before":"e73a2106f0cb81fc465a00f286ca283eef1c4693","after":"22293895c000e89997b2197a7b2b17cdf3a36369","ref":"refs/heads/ja/doc-synopsis-markup","pushedAt":"2024-09-25T06:39:39.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"doc: apply synopsis simplification on git-clone and git-init\n\nWith the new synopsis formatting backend, no special asciidoc markup\nis needed.\n\nSigned-off-by: Jean-Noël Avila \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"doc: apply synopsis simplification on git-clone and git-init"}},{"before":"abe19da52a35e8d13ca13bce61818198bf88c4b6","after":"30ff8edd7c1e511d52948861939a4a8433a16158","ref":"refs/heads/tb/weak-sha1-for-tail-sum","pushedAt":"2024-09-25T06:39:39.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"csum-file.c: use unsafe SHA-1 implementation when available\n\nUpdate hashwrite() and friends to use the unsafe_-variants of hashing\nfunctions, calling for e.g., \"the_hash_algo->unsafe_update_fn()\" instead\nof \"the_hash_algo->update_fn()\".\n\nThese callers only use the_hash_algo to produce a checksum, which we\ndepend on for data integrity, but not for cryptographic purposes, so\nthese callers are safe to use the unsafe (and potentially non-collision\ndetecting) SHA-1 implementation.\n\nTo time this, I took a freshly packed copy of linux.git, and ran the\nfollowing with and without the OPENSSL_SHA1_UNSAFE=1 build-knob. Both\nversions were compiled with -O3:\n\n $ git for-each-ref --format='%(objectname)' refs/heads refs/tags >in\n $ valgrind --tool=callgrind ~/src/git/git-pack-objects \\\n --revs --stdout --all-progress --use-bitmap-index /dev/null\n\nWithout OPENSSL_SHA1_UNSAFE=1 (that is, using the collision-detecting\nSHA-1 implementation for both cryptographic and non-cryptographic\npurposes), we spend a significant amount of our instruction count in\nhashwrite():\n\n $ callgrind_annotate --inclusive=yes | grep hashwrite | head -n1\n 159,998,868,413 (79.42%) /home/ttaylorr/src/git/csum-file.c:hashwrite [/home/ttaylorr/src/git/git-pack-objects]\n\n, and the resulting \"clone\" takes 19.219 seconds of wall clock time,\n18.94 seconds of user time and 0.28 seconds of system time.\n\nCompiling with OPENSSL_SHA1_UNSAFE=1, we spend ~60% fewer instructions\nin hashwrite():\n\n $ callgrind_annotate --inclusive=yes | grep hashwrite | head -n1\n 59,164,001,176 (58.79%) /home/ttaylorr/src/git/csum-file.c:hashwrite [/home/ttaylorr/src/git/git-pack-objects]\n\n, and generate the resulting \"clone\" much unsafeer, in only 11.597 seconds\nof wall time, 11.37 seconds of user time, and 0.23 seconds of system\ntime, for a ~40% speed-up.\n\nSigned-off-by: Taylor Blau \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"csum-file.c: use unsafe SHA-1 implementation when available"}},{"before":null,"after":"320c96b0cb16c50b2270ec46557268e041ff292c","ref":"refs/heads/ps/includeif-onbranch-cornercase-fix","pushedAt":"2024-09-25T06:39:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"config: fix evaluating \"onbranch\" with nonexistent git dir\n\nThe `include_by_branch()` function is responsible for evaluating whether\nor not a specific include should be pulled in based on the currently\nchecked out branch. Naturally, his condition can only be evaluated when\nwe have a properly initialized repository with a ref store in the first\nplace. This is why the function guards against the case when either\n`data->repo` or `data->repo->gitdir` are `NULL` pointers.\n\nBut the second check is insufficient: the `gitdir` may be set even\nthough the repository has not been initialized. Quoting \"setup.c\":\n\n NEEDSWORK: currently we allow bogus GIT_DIR values to be set in some\n code paths so we also need to explicitly setup the environment if the\n user has set GIT_DIR. It may be beneficial to disallow bogus GIT_DIR\n values at some point in the future.\n\nSo when either the GIT_DIR environment variable or the `--git-dir`\nglobal option are set by the user then `the_repository` may end up with\nan initialized `gitdir` variable. And this happens even when the dir is\ninvalid, like for example when it doesn't exist. It follows that only\nchecking for whether or not `gitdir` is `NULL` is not sufficient for us\nto determine whether the repository has been properly initialized.\n\nThis issue can lead to us triggering a BUG: when using a config with an\n\"includeIf.onbranch:\" condition outside of a repository while using the\n`--git-dir` option pointing to an invalid Git directory we may end up\ntrying to evaluate the condition even though the ref storage format has\nnot been set up.\n\nThis bisects to 173761e21b (setup: start tracking ref storage format,\n2023-12-29), but that commit really only starts to surface the issue\nthat has already existed beforehand. The code to check for `gitdir` was\nintroduced via 85fe0e800c (config: work around bug with\nincludeif:onbranch and early config, 2019-07-31), which tried to fix\nsimilar issues when we didn't yet have a repository set up. But the fix\nwas incomplete as it missed the described scenario.\n\nAs the quoted comment mentions, we'd ideally refactor the code to not\nset up `gitdir` with an invalid value in the first place, but that may\nbe a bigger undertaking. Instead, refactor the code to use the ref\nstorage format as an indicator of whether or not the ref store has been\nset up to fix the bug.\n\nReported-by: Ronan Pigott \nSigned-off-by: Patrick Steinhardt \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"config: fix evaluating \"onbranch\" with nonexistent git dir"}},{"before":null,"after":"35097d58f1c51bbdac531e592d7b753ae358afb2","ref":"refs/heads/jk/sendemail-mailmap-doc","pushedAt":"2024-09-25T06:39:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"SQUASH???","shortMessageHtmlLink":"SQUASH???"}},{"before":null,"after":"537e516a39a760fddc4f3f5020c4118943f6c146","ref":"refs/heads/ds/sparse-checkout-expansion-advice","pushedAt":"2024-09-25T06:39:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"sparse-checkout: disable advice in 'disable'\n\nWhen running 'git sparse-checkout disable' with the sparse index\nenabled, Git is expected to expand the index into a full index. However,\nit currently outputs the advice message saying that that is unexpected\nand likely due to an issue with the working directory.\n\nDisable this advice message when in this code path. Establish a pattern\nfor doing a similar removal in the future.\n\nSigned-off-by: Derrick Stolee \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"sparse-checkout: disable advice in 'disable'"}},{"before":"36d9898061f8f70e5f6825282498b9dbba5452b1","after":"6241ce217046cc77d306bda06ad80ac1973b4932","ref":"refs/heads/ps/reftable-concurrent-writes","pushedAt":"2024-09-25T06:39:39.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"refs/reftable: reload locked stack when preparing transaction\n\nWhen starting a reftable transaction we lock all stacks we are about to\nmodify. While it may happen that the stack is out-of-date at this point\nin time we don't really care: transactional updates encode the expected\nstate of a certain reference, so all that we really want to verify is\nthat the _current_ value matches that expected state.\n\nPass `REFTABLE_STACK_NEW_ADDITION_RELOAD` when locking the stack such\nthat an out-of-date stack will be reloaded after having been locked.\nThis change is safe because all verifications of the expected state\nhappen after this step anyway.\n\nAdd a testcase that verifies that many writers are now able to write to\nthe stack concurrently without failures and with a deterministic end\nresult.\n\nSigned-off-by: Patrick Steinhardt \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"refs/reftable: reload locked stack when preparing transaction"}},{"before":null,"after":"98398f3b6b764e2a03203be9d00a0de41b556936","ref":"refs/heads/ak/doc-sparse-co-typofix","pushedAt":"2024-09-25T06:39:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"Documentation/technical: fix a typo\n\nFix a typo in documentation.\n\nSigned-off-by: Andrew Kreimer \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"Documentation/technical: fix a typo"}},{"before":"82b153f3f1583df6c363b9883a9b9d50b6761a12","after":"d66a0d7c57080ee0791dc4caec38c48e09588772","ref":"refs/heads/ps/reftable-alloc-failures","pushedAt":"2024-09-25T06:39:39.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"reftable: handle trivial allocation failures\n\nHandle trivial allocation failures in the reftable library and its unit\ntests.\n\nSigned-off-by: Patrick Steinhardt \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"reftable: handle trivial allocation failures"}},{"before":null,"after":"ed4d4f38373f774891123e995fc47333d5a048b6","ref":"refs/heads/ak/typofix-builtins","pushedAt":"2024-09-25T06:39:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"gitgitgadget[bot]","name":null,"path":"/apps/gitgitgadget","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/12836?s=80&v=4"},"commit":{"message":"builtin: fix typos\n\nFix typos in comments.\n\nSigned-off-by: Andrew Kreimer \nReviewed-by: Eric Sunshine \nSigned-off-by: Junio C Hamano ","shortMessageHtmlLink":"builtin: fix typos"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yOFQwNjozNjowMC4wMDAwMDBazwAAAATDO0VF","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yNVQwNjozOTozOS4wMDAwMDBazwAAAAS_82ez"}},"title":"Activity · gitgitgadget/git"}