{"push_id":594878648,"size":17,"distinct_size":0,"ref":"refs/heads/master","head":"db9a70b159a107da29f88865d63ba14dd127556f","before":"ed7e3bc822856c30066a4ff0178033b22046fe96","commits":[{"sha":"c422b9b3d5938a4d386533604d4c0dbedfcb2b6d","author":{"email":"a51dda7c7ff50b61eaea0444371f4a6a9301e501@keeping.me.uk","name":"John Keeping"},"message":"tag: reference with \"h\" instead of \"id\"\n\nWhen clicking on \"log\" from a tag we end up showing the log of whatever\nbranch we used to reach the tag.  If the tag doesn't point onto a branch\nthen the tagged commit won't appear in this output.\n\nBy linking to tags with the head parameter instead of the \"id\" parameter\nthe log link will show the log of the tag.  This is clearly desirable\nwhen the tag has been reached from the refs UI and changing the\nbehaviour for tag decorations makes them match branch decorations where\nlog -> decoration -> log shows the log of the decoration.\n\nReported-by: Ferry Huberts <mailings@hupie.com>\nSigned-off-by: John Keeping <john@keeping.me.uk>","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/c422b9b3d5938a4d386533604d4c0dbedfcb2b6d"},{"sha":"1a2eeb94d42b983213076906eb5c5b85452b2c30","author":{"email":"616c365f96b8b68cc5e24e6699ebd9189e2a7eb0@gmail.com","name":"Janus"},"message":"Add Etags for snapshots","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/1a2eeb94d42b983213076906eb5c5b85452b2c30"},{"sha":"c58cec9dff273b44c428cfaee24e5e3743c0034e","author":{"email":"b42cd6c1806bb059f1e7279e361c80743d8993a6@cryptocrack.de","name":"Lukas Fleischer"},"message":"Add repo.hide and repo.ignore\n\nThese options can be used to hide a repository from the index or\ncompletely ignore a repository, respectively. They are particularly\nuseful when used in combination with scan-path.\n\nSigned-off-by: Lukas Fleischer <cgit@cryptocrack.de>","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/c58cec9dff273b44c428cfaee24e5e3743c0034e"},{"sha":"1a9e56607eae2df2f4522b41294d94cb09fc4e5c","author":{"email":"b42cd6c1806bb059f1e7279e361c80743d8993a6@cryptocrack.de","name":"Lukas Fleischer"},"message":"ui-shared.c: Refactor add_clone_urls()\n\nMake use of strbuf_split_str() and strbuf lists to split clone URLs.\n\nSigned-off-by: Lukas Fleischer <cgit@cryptocrack.de>","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/1a9e56607eae2df2f4522b41294d94cb09fc4e5c"},{"sha":"7358f63015a27d1c22816a3c1f734c3d4beed115","author":{"email":"1d6e1cf70ec6f9ab28d3ea4b27a49a77654d370e@eworm.de","name":"Christian Hesse"},"message":"git: update for v2.3.0\n\n* sort_string_list(): rename to string_list_sort() (upstream commit\n  3383e199)\n* update read_tree_recursive callback to pass strbuf as base (upstream\n  commit 6a0b0b6d)\n\nSigned-off-by: Christian Hesse <mail@eworm.de>","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/7358f63015a27d1c22816a3c1f734c3d4beed115"},{"sha":"b66b16ed026c6f57ad8ae892c821d835113e7fb2","author":{"email":"b42cd6c1806bb059f1e7279e361c80743d8993a6@cryptocrack.de","name":"Lukas Fleischer"},"message":"ui-clone.c: Fix path check\n\nThe starts_with() check was broken in two ways: For one thing, the\nparameters were passed in the wrong order, for another thing,\nstarts_with() returns 1 if the string starts with the prefix (not 0).\n\nNote that this bug existed since commit 02a545e (Add support for cloning\nover http, 2008-08-06) but only pops in in corner cases.\n\nSigned-off-by: Lukas Fleischer <cgit@cryptocrack.de>","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/b66b16ed026c6f57ad8ae892c821d835113e7fb2"},{"sha":"6e498de213aeebf63523ff0f298c2ae6393f9c0f","author":{"email":"e7e312fea4c2c1aad2bb075d739111890e1ce08b@zx2c4.com","name":"Jason A. Donenfeld"},"message":"ui-clone.c: Fix off-by-one error in pack path\n\nSigned-off-by: Jason A. Donenfeld <Jason@zx2c4.com>","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/6e498de213aeebf63523ff0f298c2ae6393f9c0f"},{"sha":"36b1d78923734c3898eeeefadd4483155d18ecb5","author":{"email":"1d6e1cf70ec6f9ab28d3ea4b27a49a77654d370e@eworm.de","name":"Christian Hesse"},"message":"shrink cgit.png file size\n\nRan optipng against cgit.png, which shrank file size by more than eight\npercent. The image (including protocol overhead) should fit into a\nsingle network packet now.\n\nOptipng optimizes filters and compression. The actual pixel results are\nnot altered.\n\nSigned-off-by: Christian Hesse <mail@eworm.de>","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/36b1d78923734c3898eeeefadd4483155d18ecb5"},{"sha":"5e3e665d60c3c1f25443d1cc0ff1f7f2fe5fbf94","author":{"email":"e7e312fea4c2c1aad2bb075d739111890e1ce08b@zx2c4.com","name":"Jason A. Donenfeld"},"message":"Bump verison","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/5e3e665d60c3c1f25443d1cc0ff1f7f2fe5fbf94"},{"sha":"911d574250d3a2ae97f282fb8f466db2afa1cd64","author":{"email":"1d6e1cf70ec6f9ab28d3ea4b27a49a77654d370e@eworm.de","name":"Christian Hesse"},"message":"git: update to v2.3.1\n\nUpdate to git version v2.3.1, no changes required.\n\nSigned-off-by: Christian Hesse <mail@eworm.de>","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/911d574250d3a2ae97f282fb8f466db2afa1cd64"},{"sha":"936295c4e4de8da83701c67377a911a0aefbcbd6","author":{"email":"b42cd6c1806bb059f1e7279e361c80743d8993a6@cryptocrack.de","name":"Lukas Fleischer"},"message":"Simplify commit and tag parsing\n\n* Use skip_prefix to avoid magic numbers in the code.\n* Use xcalloc() instead of xmalloc(), followed by manual initialization.\n* Split out line splitting.\n\nSigned-off-by: Lukas Fleischer <cgit@cryptocrack.de>","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/936295c4e4de8da83701c67377a911a0aefbcbd6"},{"sha":"e14eee9ea573a17c9501d1020fc869218aac9e8a","author":{"email":"e7e312fea4c2c1aad2bb075d739111890e1ce08b@zx2c4.com","name":"Jason A. Donenfeld"},"message":"ui-repolist: use correct owner query link","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/e14eee9ea573a17c9501d1020fc869218aac9e8a"},{"sha":"c3473e8a5d830fa0a2fc193eae8b30001a10871e","author":{"email":"e7e312fea4c2c1aad2bb075d739111890e1ce08b@zx2c4.com","name":"Jason A. Donenfeld"},"message":"ui-repolist: use ctx.qry.url instead of rooturl, in case we're filtering","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/c3473e8a5d830fa0a2fc193eae8b30001a10871e"},{"sha":"db4b735464aa9a3a329494b7f042413a65e182f2","author":{"email":"e7e312fea4c2c1aad2bb075d739111890e1ce08b@zx2c4.com","name":"Jason A. Donenfeld"},"message":"ui-shared: keep filter repolist page in pagination","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/db4b735464aa9a3a329494b7f042413a65e182f2"},{"sha":"6bcda2f73da605d48279341b1905c1b234a39368","author":{"email":"e7e312fea4c2c1aad2bb075d739111890e1ce08b@zx2c4.com","name":"Jason A. Donenfeld"},"message":"ui-shared: Add current url helper function.","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/6bcda2f73da605d48279341b1905c1b234a39368"},{"sha":"2e4a41e84029cbfa70c654fe5dfb35747f2dfbba","author":{"email":"e7e312fea4c2c1aad2bb075d739111890e1ce08b@zx2c4.com","name":"Jason A. Donenfeld"},"message":"Make root handling sane again.","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/2e4a41e84029cbfa70c654fe5dfb35747f2dfbba"},{"sha":"db9a70b159a107da29f88865d63ba14dd127556f","author":{"email":"a51dda7c7ff50b61eaea0444371f4a6a9301e501@keeping.me.uk","name":"John Keeping"},"message":"cache: use F_SETLK to avoid stale lock files\n\nIf CGit is killed while it holds a lock on a cache slot (for example\nbecause it is taking too long to generate a page), the lock file will be\nleft in place.  This prevents any future attempt to use the same slot\nsince it will fail to exclusively create the lock file.\n\nSince CGit is the only program that should be manipulating lock files,\nwe can use advisory locking to detect whether another process is\nactually using the lock file or if it is now stale.\n\nI have confirmed that this works on Linux by setting a short TTL in a\ncustom cgitrc and running the following with CGit patched to print a\nmessage to stderr if the fcntl(2) fails:\n\n\t$ export CGIT_CONFIG=$PWD/cgitrc\n\t$ export QUERY_STRING=url=cgit/tree/ui-shared.c\n\t$ ./cgit |\n\t\tgrep -v -e '^<div class=.footer.>' \\\n\t\t\t-e '^Last-Modified: ' \\\n\t\t\t-e ^'Expires: ' >expect\n\t$ seq 50000 | dd bs=8192 |\n\t\tparallel -j200 \"diff -u expect <(./cgit |\n\t\t\tgrep -v -e '^<div class=.footer.>' \\\n\t\t\t\t-e '^Last-Modified: ' \\\n\t\t\t\t-e ^'Expires: ') || echo BAD\"\n\nThis printed the fail message several times without ever printing \"BAD\".\n\nSigned-off-by: John Keeping <john@keeping.me.uk>","distinct":false,"url":"https://api.github.com/repos/johnkeeping/cgit/commits/db9a70b159a107da29f88865d63ba14dd127556f"}]}