{"thread":{"id":"565","subject":"gitweb wishlist","startedAt":"2005-05-11T01:26:26Z","lastAt":"2005-06-04T08:29:21Z","messageCount":102,"participants":["Petr Baudis","YOSHIFUJI Hideaki / 吉藤英明","Kay Sievers","Jan-Benedict Glaw","Junio C Hamano","Jonas Fonseca","Linus Torvalds","Thomas Glanzmann","H. Peter Anvin","Matthias Urlichs","David Mansfield","Martin Langhoff","Edgar Toernig","David Greaves"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"3018","messageId":"20050511012626.GL26384@pasky.ji.cz","threadId":"565","inReplyTo":null,"subject":"gitweb wishlist","fromName":"Petr Baudis","fromEmail":"pasky@ucw.cz","sentAt":"2005-05-11T01:26:26Z","receivedAt":"2005-05-11T01:26:26Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"  Hello,\n\n  I would be very happy if you could extend the gitweb scripts a little.\nBasically, what I need is to have ability to create a permanent link to\na given file in the repository, which stays same across revisions (as\nlong as the file stays with the given name, obviously).\n\n  E.g. I would like to have something like\n\n\thttp://www.kernel.org/git/gitweb.cgi?p=cogito%2Fcogito.git;n=contrib/ciabot.pl\n\nfor file contrib/ciabot.pl in the latest Cogito tree, and\n\n\thttp://www.kernel.org/git/gitweb.cgi?p=cogito%2Fcogito.git;n=contrib\n\nfor the list of the contrib/ directory in the latest Cogito tree.\n\n  I think I would prefer the link from the repository index to go not to\nthe log page, but some \"summary\" page, which would have some short\ninformation about the repository (owner, description, list of branches\nif gitweb supports that, list of tags, link to the latest tree and link\nto the log).\n\n  BTW, why are people using ';' in the URIs for separators instead of\ngood old '&'s? Hmm, actually it just occurred to me that it might be to\nworkaround entity string problems?\n\n  Thanks,\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nC++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor\n"},{"id":"3020","messageId":"20050511.104907.57995840.yoshfuji@linux-ipv6.org","threadId":"565","inReplyTo":"20050511012626.GL26384@pasky.ji.cz","subject":"Re: gitweb wishlist","fromName":"YOSHIFUJI Hideaki / 吉藤英明","fromEmail":"yoshfuji@linux-ipv6.org","sentAt":"2005-05-11T01:49:07Z","receivedAt":"2005-05-11T01:49:07Z","isPatch":false,"sender":{"key":"yoshfuji@linux-ipv6.org","avatar":"https://gravatar.com/avatar/92c288bb8d3e34afd7bb1574cc1079a3d0aa6d36d80955d1ec6a1cea2868d392?d=mp&s=160"},"body":"In article <20050511012626.GL26384@pasky.ji.cz> (at Wed, 11 May 2005 03:26:26 +0200), Petr Baudis <pasky@ucw.cz> says:\n\n>   E.g. I would like to have something like\n> \n> \thttp://www.kernel.org/git/gitweb.cgi?p=cogito%2Fcogito.git;n=contrib/ciabot.pl\n                                                     ~~~ why not /?\n\n--yoshfuji\n"},{"id":"3022","messageId":"20050511020401.GM26384@pasky.ji.cz","threadId":"565","inReplyTo":"20050511.104907.57995840.yoshfuji@linux-ipv6.org","subject":"Re: gitweb wishlist","fromName":"Petr Baudis","fromEmail":"pasky@ucw.cz","sentAt":"2005-05-11T02:04:02Z","receivedAt":"2005-05-11T02:04:02Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Wed, May 11, 2005 at 03:49:07AM CEST, I got a letter\nwhere \"YOSHIFUJI Hideaki / ?$B5HF#1QL@\" <yoshfuji@linux-ipv6.org> told me that...\n> In article <20050511012626.GL26384@pasky.ji.cz> (at Wed, 11 May 2005 03:26:26 +0200), Petr Baudis <pasky@ucw.cz> says:\n> \n> >   E.g. I would like to have something like\n> > \n> > \thttp://www.kernel.org/git/gitweb.cgi?p=cogito%2Fcogito.git;n=contrib/ciabot.pl\n>                                                      ~~~ why not /?\n\nThis was a simple cut'n'paste. I don't care either way personally, but I\nthink it's better to be conservative when generating links and escape\nthis. OTOH it should obviously also accept a URL containing a slash\ninstead.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nC++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor\n"},{"id":"3037","messageId":"1115801227.22799.13.camel@localhost.localdomain","threadId":"565","inReplyTo":"20050511012626.GL26384@pasky.ji.cz","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-11T08:47:07Z","receivedAt":"2005-05-11T08:47:07Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Wed, 2005-05-11 at 03:26 +0200, Petr Baudis wrote:\n>   Hello,\n> \n>   I would be very happy if you could extend the gitweb scripts a little.\n> Basically, what I need is to have ability to create a permanent link to\n> a given file in the repository, which stays same across revisions (as\n> long as the file stays with the given name, obviously).\n> \n>   E.g. I would like to have something like\n> \n> \thttp://www.kernel.org/git/gitweb.cgi?p=cogito%2Fcogito.git;n=contrib/ciabot.pl\n> \n> for file contrib/ciabot.pl in the latest Cogito tree, and\n> \n> \thttp://www.kernel.org/git/gitweb.cgi?p=cogito%2Fcogito.git;n=contrib\n> \n> for the list of the contrib/ directory in the latest Cogito tree.\n\nWith the next round I will try to introduce a real browser through the\ntree instead of the current damn simple tree-object list. It would be\nnice if it can show the the current path and provide a \"up to parent\"\nway. Along with that it should be easy to add the stuff you asked for.\n\n>   I think I would prefer the link from the repository index to go not to\n> the log page, but some \"summary\" page, which would have some short\n> information about the repository (owner, description, list of branches\n> if gitweb supports that, list of tags, link to the latest tree and link\n> to the log).\n> \n>   BTW, why are people using ';' in the URIs for separators instead of\n> good old '&'s? Hmm, actually it just occurred to me that it might be to\n> workaround entity string problems?\n\nYes, but it's \"bad old\" not \"good\". :)\n  http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2\n\nThanks,\nKay\n\n"},{"id":"3038","messageId":"20050511093015.GK8176@lug-owl.de","threadId":"565","inReplyTo":"20050511012626.GL26384@pasky.ji.cz","subject":"Re: gitweb wishlist","fromName":"Jan-Benedict Glaw","fromEmail":"jbglaw@lug-owl.de","sentAt":"2005-05-11T09:30:15Z","receivedAt":"2005-05-11T09:30:15Z","isPatch":false,"sender":{"key":"jbglaw@lug-owl.de","avatar":null},"body":"On Wed, 2005-05-11 03:26:26 +0200, Petr Baudis <pasky@ucw.cz> wrote:\n>   I would be very happy if you could extend the gitweb scripts a little.\n> Basically, what I need is to have ability to create a permanent link to\n> a given file in the repository, which stays same across revisions (as\n> long as the file stays with the given name, obviously).\n\nI've got another one. I'd like to see st_mtime on the file lists to see\nwhen a file was last touched...\n\nMfG, JBG\n\n-- \nJan-Benedict Glaw       jbglaw@lug-owl.de    . +49-172-7608481             _ O _\n\"Eine Freie Meinung in  einem Freien Kopf    | Gegen Zensur | Gegen Krieg  _ _ O\n fuer einen Freien Staat voll Freier Bürger\" | im Internet! |   im Irak!   O O O\nret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA));\n"},{"id":"3186","messageId":"7v3bssfbsj.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"20050511012626.GL26384@pasky.ji.cz","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-05-12T20:07:40Z","receivedAt":"2005-05-12T20:07:40Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"* [Previous page] [Next page] would be nice in addition to last\n  10, day, week, etc.\n\n* Putting the commit headline and \"X hour\"s ago in a separate\n  div or span next to each other, so that a long commit headline\n  wraps properly and does not start the second line just under\n  the \"X hours ago\" timestamp would be nicer (you can see what I\n  mean easily by narrowing the browser window).\n\n"},{"id":"3197","messageId":"1115931627.8465.6.camel@dhcp-188.off.vrfy.org","threadId":"565","inReplyTo":"7v3bssfbsj.fsf@assigned-by-dhcp.cox.net","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-12T21:00:26Z","receivedAt":"2005-05-12T21:00:26Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Thu, 2005-05-12 at 13:07 -0700, Junio C Hamano wrote:\n> * [Previous page] [Next page] would be nice in addition to last\n>   10, day, week, etc.\n\nThat should be easy to do with the parameters we have now for the\ngit-rev-list. I will first finish the new browser through the\ntrees/files, then the project overview page and after that try the\npager,\n\n> * Putting the commit headline and \"X hour\"s ago in a separate\n>   div or span next to each other, so that a long commit headline\n>   wraps properly and does not start the second line just under\n>   the \"X hours ago\" timestamp would be nicer (you can see what I\n>   mean easily by narrowing the browser window).\n\nBlock elements (div) are not allowed inside an a-tag in XHTML/Strict -\ndon't know how to do this, cause the whole headline should be a link\nwithout the use of javascript. :)\n\nThanks,\nKay\n\n"},{"id":"3200","messageId":"7vy8akdtxz.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"1115931627.8465.6.camel@dhcp-188.off.vrfy.org","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-05-12T21:18:32Z","receivedAt":"2005-05-12T21:18:32Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":">>>>> \"KS\" == Kay Sievers <kay.sievers@vrfy.org> writes:\n\n>> * Putting the commit headline and \"X hour\"s ago in a separate\n>> div or span next to each other, so that a long commit headline\n>> wraps properly and does not start the second line just under\n>> the \"X hours ago\" timestamp would be nicer (you can see what I\n>> mean easily by narrowing the browser window).\n\nKS> Block elements (div) are not allowed inside an a-tag in XHTML/Strict -\nKS> don't know how to do this,...\n\nWouldn't splitting the commit headline and \"X hours ago\" into\ntwo separate elements and wrap them individually inside an a-tag\neach pointing at the same destination good enough then?\n\n"},{"id":"3245","messageId":"20050513120618.GA26263@diku.dk","threadId":"565","inReplyTo":"20050511012626.GL26384@pasky.ji.cz","subject":"Re: gitweb wishlist","fromName":"Jonas Fonseca","fromEmail":"fonseca@diku.dk","sentAt":"2005-05-13T12:06:18Z","receivedAt":"2005-05-13T12:06:18Z","isPatch":false,"sender":{"key":"fonseca@diku.dk","avatar":"https://gravatar.com/avatar/f82f3ad698717c51873b020c750a92438c820a24056dc39fe4d07baa10a92264?d=mp&s=160"},"body":"I don't know if this is intentional, but it looks like gitweb discards\neverything after the first line starting with 'Signed-off-by:' on the\nlog page. This will in some cases remove valuable log information when\na second author or the committer adds additional comments to a commit:\n\n        <log message by author>\n\n        Signed-off-by: <author>\n\n        <log message by committer>\n\n        Signed-off-by: <committer>\n\nThe commit page gets it right, which is why I suspect it might just be a\nway to trim the amount of text on the log page.\n\nI also noticed that there is a 'faulty' signed-off-by line in commit\n14ebb908e10f068dc1901d35f4b716bc69143d19 in case the above is\nintentional. Dunno if that should be matched by relaxing the regexp a\nlittle.\n\n-- \nJonas Fonseca\n"},{"id":"3277","messageId":"1116038097.9317.11.camel@dhcp-188.off.vrfy.org","threadId":"565","inReplyTo":"20050513120618.GA26263@diku.dk","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-14T02:34:57Z","receivedAt":"2005-05-14T02:34:57Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Fri, 2005-05-13 at 14:06 +0200, Jonas Fonseca wrote:\n> I don't know if this is intentional, but it looks like gitweb discards\n> everything after the first line starting with 'Signed-off-by:' on the\n> log page. This will in some cases remove valuable log information when\n> a second author or the committer adds additional comments to a commit:\n> \n>         <log message by author>\n> \n>         Signed-off-by: <author>\n> \n>         <log message by committer>\n> \n>         Signed-off-by: <committer>\n> \n> The commit page gets it right, which is why I suspect it might just be a\n> way to trim the amount of text on the log page.\n> \n> I also noticed that there is a 'faulty' signed-off-by line in commit\n> 14ebb908e10f068dc1901d35f4b716bc69143d19 in case the above is\n> intentional. Dunno if that should be matched by relaxing the regexp a\n> little.\n\nAll that should work now.\n\nThanks,\nKay\n\n"},{"id":"3278","messageId":"1116038370.9317.17.camel@dhcp-188.off.vrfy.org","threadId":"565","inReplyTo":"20050511093015.GK8176@lug-owl.de","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-14T02:39:30Z","receivedAt":"2005-05-14T02:39:30Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Wed, 2005-05-11 at 11:30 +0200, Jan-Benedict Glaw wrote:\n> On Wed, 2005-05-11 03:26:26 +0200, Petr Baudis <pasky@ucw.cz> wrote:\n> >   I would be very happy if you could extend the gitweb scripts a little.\n> > Basically, what I need is to have ability to create a permanent link to\n> > a given file in the repository, which stays same across revisions (as\n> > long as the file stays with the given name, obviously).\n> \n> I've got another one. I'd like to see st_mtime on the file lists to see\n> when a file was last touched...\n\nWe don't have that information in the trees. The date is only available\nin the commits and reading all commits or storing that information in a\nindex or a database is beyond the scope of that simple cgi.\n\nThanks,\nKay\n\n"},{"id":"3279","messageId":"1116038598.9317.22.camel@dhcp-188.off.vrfy.org","threadId":"565","inReplyTo":"20050511012626.GL26384@pasky.ji.cz","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-14T02:43:18Z","receivedAt":"2005-05-14T02:43:18Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Wed, 2005-05-11 at 03:26 +0200, Petr Baudis wrote:\n>   I would be very happy if you could extend the gitweb scripts a little.\n> Basically, what I need is to have ability to create a permanent link to\n> a given file in the repository, which stays same across revisions (as\n> long as the file stays with the given name, obviously).\n> \n>   E.g. I would like to have something like\n> \n> \thttp://www.kernel.org/git/gitweb.cgi?p=cogito%2Fcogito.git;n=contrib/ciabot.pl\n> \n> for file contrib/ciabot.pl in the latest Cogito tree, and\n\nhttp://www.kernel.org/git/gitweb.cgi?p=cogito/cogito.git;a=blob;f=contrib/ciabot.pl\n\n> \thttp://www.kernel.org/git/gitweb.cgi?p=cogito%2Fcogito.git;n=contrib\n> \n> for the list of the contrib/ directory in the latest Cogito tree.\n\nhttp://www.kernel.org/git/gitweb.cgi?p=cogito/cogito.git;a=tree;f=contrib\n\n>   I think I would prefer the link from the repository index to go not to\n> the log page, but some \"summary\" page, which would have some short\n> information about the repository (owner, description, list of branches\n> if gitweb supports that, list of tags, link to the latest tree and link\n> to the log).\n\nSounds reasonable, I will try that with the next round.\n\nThanks,\nKay\n\n"},{"id":"3299","messageId":"20050514105457.GA21705@diku.dk","threadId":"565","inReplyTo":"1116038598.9317.22.camel@dhcp-188.off.vrfy.org","subject":"Re: gitweb wishlist","fromName":"Jonas Fonseca","fromEmail":"fonseca@diku.dk","sentAt":"2005-05-14T10:54:57Z","receivedAt":"2005-05-14T10:54:57Z","isPatch":false,"sender":{"key":"fonseca@diku.dk","avatar":"https://gravatar.com/avatar/f82f3ad698717c51873b020c750a92438c820a24056dc39fe4d07baa10a92264?d=mp&s=160"},"body":"Kay Sievers <kay.sievers@vrfy.org> wrote Sat, May 14, 2005:\n> On Wed, 2005-05-11 at 03:26 +0200, Petr Baudis wrote:\n> >   I would be very happy if you could extend the gitweb scripts a little.\n> > Basically, what I need is to have ability to create a permanent link to\n> > a given file in the repository, which stays same across revisions (as\n> > long as the file stays with the given name, obviously).\n> > \n> >   E.g. I would like to have something like\n> > \n> > \thttp://www.kernel.org/git/gitweb.cgi?p=cogito%2Fcogito.git;n=contrib/ciabot.pl\n> > \n> > for file contrib/ciabot.pl in the latest Cogito tree, and\n> \n> http://www.kernel.org/git/gitweb.cgi?p=cogito/cogito.git;a=blob;f=contrib/ciabot.pl\n\nHow about support for getting the 'raw' files and diffs without all the\nHTML markup?\n\n-- \nJonas Fonseca\n"},{"id":"3486","messageId":"1116384951.5094.83.camel@dhcp-188.off.vrfy.org","threadId":"565","inReplyTo":"20050511012626.GL26384@pasky.ji.cz","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-18T02:55:51Z","receivedAt":"2005-05-18T02:55:51Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Wed, 2005-05-11 at 03:26 +0200, Petr Baudis wrote:\n\n>   I think I would prefer the link from the repository index to go not to\n> the log page, but some \"summary\" page, which would have some short\n> information about the repository (owner, description, list of branches\n> if gitweb supports that, list of tags, link to the latest tree and link\n> to the log).\n\nI did this now. The top-link shows now the repository listing with a\nnice \"last change\" field. The default link points to an overview page\nwhich also list the tags.\n(The owner filed in that list is not correct until now, cause the\ncron-job needs to be adapted.)\n\nThanks,\nKay\n\n"},{"id":"3492","messageId":"20050518094545.GC25416@pasky.ji.cz","threadId":"565","inReplyTo":"1116384951.5094.83.camel@dhcp-188.off.vrfy.org","subject":"Re: gitweb wishlist","fromName":"Petr Baudis","fromEmail":"pasky@ucw.cz","sentAt":"2005-05-18T09:45:46Z","receivedAt":"2005-05-18T09:45:46Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"Dear diary, on Wed, May 18, 2005 at 04:55:51AM CEST, I got a letter\nwhere Kay Sievers <kay.sievers@vrfy.org> told me that...\n> On Wed, 2005-05-11 at 03:26 +0200, Petr Baudis wrote:\n> \n> >   I think I would prefer the link from the repository index to go not to\n> > the log page, but some \"summary\" page, which would have some short\n> > information about the repository (owner, description, list of branches\n> > if gitweb supports that, list of tags, link to the latest tree and link\n> > to the log).\n> \n> I did this now. The top-link shows now the repository listing with a\n> nice \"last change\" field. The default link points to an overview page\n> which also list the tags.\n> (The owner filed in that list is not correct until now, cause the\n> cron-job needs to be adapted.)\n\nThanks, this is exactly how I envisioned it. :-)\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nStuff: http://pasky.or.cz/\nC++: an octopus made by nailing extra legs onto a dog. -- Steve Taylor\n"},{"id":"3622","messageId":"Pine.LNX.4.58.0505200948150.2206@ppc970.osdl.org","threadId":"565","inReplyTo":"1116384951.5094.83.camel@dhcp-188.off.vrfy.org","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-20T16:54:24Z","receivedAt":"2005-05-20T16:54:24Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Wed, 18 May 2005, Kay Sievers wrote:\n> \n> I did this now. The top-link shows now the repository listing with a\n> nice \"last change\" field. The default link points to an overview page\n> which also list the tags.\n\nIn the summary page, could we get authorship information too? Right now it \nlooks like\n\n\trecent commits\n\n\t15 minutes ago\t[PATCH] Add tests for diff-tree\n\t31 minutes ago\tdiff-tree: use new base_name_compare() helper function\n\t34 minutes ago\tIntroduce \"base_name_compare()\" helper function \n\t...\n\nand wouldn't it be nice if it told you who had written these things, like\n\n\trecent commits\n\n\t15 minutes ago\tJunio C Hamano\t[PATCH] Add tests for diff-tree\n\t31 minutes ago\tLinus Torvalds\tdiff-tree: use new base_name_compare() helper function\n\t34 minutes ago\tLinus Torvalds\tIntroduce \"base_name_compare()\" helper function \n\t...\n\n(limit the name to the first 20 characters or something to make things \nline up).\n\nIf the lines get too long, you could changes \"minutes\" to \"min\", and maybe \nlimit the name to the first 10 characters (or even first name, but there's \na lot of David's around, while 10-12 characters tends to get enough of \nthe last name to be reasonable unique).\n\n\t\tLinus\n"},{"id":"3624","messageId":"7vbr75u8vw.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505200948150.2206@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-05-20T17:04:03Z","receivedAt":"2005-05-20T17:04:03Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":">>>>> \"LT\" == Linus Torvalds <torvalds@osdl.org> writes:\n\nLT> If the lines get too long, you could changes \"minutes\" to \"min\", and maybe \nLT> limit the name to the first 10 characters (or even first name, but there's \nLT> a lot of David's around, while 10-12 characters tends to get enough of \nLT> the last name to be reasonable unique).\n\nOr abbreviate the first names.  L Torvalds, JC Hamano, etc.\n\n"},{"id":"3626","messageId":"Pine.LNX.4.58.0505201019460.2206@ppc970.osdl.org","threadId":"565","inReplyTo":"7vbr75u8vw.fsf@assigned-by-dhcp.cox.net","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-20T17:21:23Z","receivedAt":"2005-05-20T17:21:23Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Fri, 20 May 2005, Junio C Hamano wrote:\n> \n> Or abbreviate the first names.  L Torvalds, JC Hamano, etc.\n\nTechnically, yes. Except I end up at least personally going by either\nfirst names (or _possibly_ email addresses), not by last name. Maybe Linux\nis fairly unique in that, but dammit, I'm not \"Torvalds\", I'm \"Linus\". And\nlike it or not, you're either Junio or junkio at least to me ;)\n\n\t\tLinus\n"},{"id":"3628","messageId":"1116611932.12975.22.camel@dhcp-188","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505200948150.2206@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-20T17:58:52Z","receivedAt":"2005-05-20T17:58:52Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Fri, 2005-05-20 at 09:54 -0700, Linus Torvalds wrote:\n> \n> On Wed, 18 May 2005, Kay Sievers wrote:\n> > \n> > I did this now. The top-link shows now the repository listing with a\n> > nice \"last change\" field. The default link points to an overview page\n> > which also list the tags.\n> \n> In the summary page, could we get authorship information too? Right now it \n> looks like\n> \n> \trecent commits\n> \n> \t15 minutes ago\t[PATCH] Add tests for diff-tree\n> \t31 minutes ago\tdiff-tree: use new base_name_compare() helper function\n> \t34 minutes ago\tIntroduce \"base_name_compare()\" helper function \n> \t...\n> \n> and wouldn't it be nice if it told you who had written these things, like\n> \n> \trecent commits\n> \n> \t15 minutes ago\tJunio C Hamano\t[PATCH] Add tests for diff-tree\n> \t31 minutes ago\tLinus Torvalds\tdiff-tree: use new base_name_compare() helper function\n> \t34 minutes ago\tLinus Torvalds\tIntroduce \"base_name_compare()\" helper function \n> \t...\n> \n> (limit the name to the first 20 characters or something to make things \n> line up).\n\nSomething like that: :)\n  http://www.kernel.org/git/?p=cogito/cogito.git;a=summary\n\nKay\n\n"},{"id":"3629","messageId":"Pine.LNX.4.58.0505201111090.2206@ppc970.osdl.org","threadId":"565","inReplyTo":"1116611932.12975.22.camel@dhcp-188","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-20T18:16:00Z","receivedAt":"2005-05-20T18:16:00Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Fri, 20 May 2005, Kay Sievers wrote:\n> \n> Something like that: :)\n>   http://www.kernel.org/git/?p=cogito/cogito.git;a=summary\n\nLooking good.\n\nI still think \"minutes\" is an awfully long word to waste vertical space\nwith, especially since it's also the only one that will have up to three\ndigits associated with it. It seems kind of silly to give more (or even\nequal) space to the simplified time field than to the person who did\nsomething.\n\n(To see minutes, you need to use \"git/git.git\" instead of cogito.\n\nSo I still think you should change \"minutes\" to \"min\", which is the common \nabbreviation.\n\n(That \"ago\" is also very repetitive, but removing it would seem to make it \nunreadable, so I guess it's needed).\n\n\t\t\t\tLinus\n"},{"id":"3630","messageId":"Pine.LNX.4.58.0505201123550.2206@ppc970.osdl.org","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505201111090.2206@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-20T18:28:37Z","receivedAt":"2005-05-20T18:28:37Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Fri, 20 May 2005, Linus Torvalds wrote:\n>\n> Looking good.\n\nOh, dang, while I'm at it, why not ask for the \"commmitdiff\" thing to have \nthe commit message in it too, ie basically look like a prettified version \nof \"git-diff-tree -v -M <cmitname>\"\n\nYou already do the first line of it, so there's not much missing. Right\nnow there is no place where everything important from one commit is\n\"brought together\" (ie no single place where you can see both what the\ndiff is all about, and what it actually does).\n\n\t\tLinus\n"},{"id":"3633","messageId":"1116615539.12975.31.camel@dhcp-188","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505201111090.2206@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-20T18:58:59Z","receivedAt":"2005-05-20T18:58:59Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Fri, 2005-05-20 at 11:16 -0700, Linus Torvalds wrote:\n> \n> On Fri, 20 May 2005, Kay Sievers wrote:\n> > \n> > Something like that: :)\n> >   http://www.kernel.org/git/?p=cogito/cogito.git;a=summary\n> \n> Looking good.\n> \n> I still think \"minutes\" is an awfully long word to waste vertical space\n> with, especially since it's also the only one that will have up to three\n> digits associated with it.\n\nChanged to \"min\".\n\nKay\n\n"},{"id":"3634","messageId":"1116615600.12975.33.camel@dhcp-188","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505201123550.2206@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-20T19:00:00Z","receivedAt":"2005-05-20T19:00:00Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Fri, 2005-05-20 at 11:28 -0700, Linus Torvalds wrote:\n> \n> On Fri, 20 May 2005, Linus Torvalds wrote:\n> >\n> > Looking good.\n> \n> Oh, dang, while I'm at it, why not ask for the \"commmitdiff\" thing to have \n> the commit message in it too, ie basically look like a prettified version \n> of \"git-diff-tree -v -M <cmitname>\"\n> \n> You already do the first line of it, so there's not much missing. Right\n> now there is no place where everything important from one commit is\n> \"brought together\" (ie no single place where you can see both what the\n> diff is all about, and what it actually does).\n\nSomehting like this?:\n  http://kernel.org/git/?p=git/git.git;a=commitdiff;h=de809dbbce497e0d107562615c1d85ff35b4e0c5\n\nKay\n\n"},{"id":"3637","messageId":"20050520191308.GU8105@cip.informatik.uni-erlangen.de","threadId":"565","inReplyTo":"1116615600.12975.33.camel@dhcp-188","subject":"Re: gitweb wishlist","fromName":"Thomas Glanzmann","fromEmail":"sithglan@stud.uni-erlangen.de","sentAt":"2005-05-20T19:13:08Z","receivedAt":"2005-05-20T19:13:08Z","isPatch":false,"sender":{"key":"sithglan@stud.uni-erlangen.de","avatar":null},"body":"Hello Kay,\nI would like to see that I can klick on the file instead of the seperate\n'blob' link in a directory view, becasue that is more intuitive and you can\nalready an klick on directories:\n\nhttp://www.kernel.org/git/?p=git/git.git;a=tree;h=665a48af9e192ed84d2707c95d4c0d9c45eb45ad;hb=411746940f02f6fb90c4b6b97c6f07cee599c2e1\n\nThanks for this great tool!\n\nSincerely,\n\tThomas\n"},{"id":"3636","messageId":"Pine.LNX.4.58.0505201211390.2206@ppc970.osdl.org","threadId":"565","inReplyTo":"1116615600.12975.33.camel@dhcp-188","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-20T19:13:26Z","receivedAt":"2005-05-20T19:13:26Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Fri, 20 May 2005, Kay Sievers wrote:\n> \n> Somehting like this?:\n>   http://kernel.org/git/?p=git/git.git;a=commitdiff;h=de809dbbce497e0d107562615c1d85ff35b4e0c5\n\nYes, except I don't think you should repeat the part of the commit message\nthat you used as a header (so in your example, since you already used \"Fix\nup previous commit\" in the header, don't show it below).\n\nBtw, any chance to see gitweb itself under gitweb on kernel.org?\n\n\t\tLinus\n"},{"id":"3638","messageId":"Pine.LNX.4.58.0505201219420.2206@ppc970.osdl.org","threadId":"565","inReplyTo":"1116615600.12975.33.camel@dhcp-188","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-20T19:22:39Z","receivedAt":"2005-05-20T19:22:39Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Fri, 20 May 2005, Kay Sievers wrote:\n> \n> Somehting like this?:\n>   http://kernel.org/git/?p=git/git.git;a=commitdiff;h=de809dbbce497e0d107562615c1d85ff35b4e0c5\n\nBtw, at least for me, this looks much more interesting than the \"commit\" \nthing, and maybe it would make sense to make the summary links be to the \n\"commitdiff\" instead of the \"commit\"?\n\nOr is it just so much more expensive to generate, that we want to not have\npeople go there normally? (hpa cc'd, since he may have some insight into\nwhether this is likely to be an issue or not? It's not like git-diff-tree\nis that expensive, but it _does_ end up doing a \"diff\" against each\nchanged file, of course, modulo any caching of results).\n\n\t\tLinus\n"},{"id":"3641","messageId":"428E49DD.406@zytor.com","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505201219420.2206@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"H. Peter Anvin","fromEmail":"hpa@zytor.com","sentAt":"2005-05-20T20:34:37Z","receivedAt":"2005-05-20T20:34:37Z","isPatch":false,"sender":{"key":"hpa@zytor.com","avatar":null},"body":"Linus Torvalds wrote:\n> \n> On Fri, 20 May 2005, Kay Sievers wrote:\n> \n>>Somehting like this?:\n>>  http://kernel.org/git/?p=git/git.git;a=commitdiff;h=de809dbbce497e0d107562615c1d85ff35b4e0c5\n> \n> \n> Btw, at least for me, this looks much more interesting than the \"commit\" \n> thing, and maybe it would make sense to make the summary links be to the \n> \"commitdiff\" instead of the \"commit\"?\n> \n> Or is it just so much more expensive to generate, that we want to not have\n> people go there normally? (hpa cc'd, since he may have some insight into\n> whether this is likely to be an issue or not? It's not like git-diff-tree\n> is that expensive, but it _does_ end up doing a \"diff\" against each\n> changed file, of course, modulo any caching of results).\n> \n\nWhat I ended up doing for the diff viewer on kernel.org is that every \npage that's generated gets stuffed in a cache (locklessly indexed by a \nSHA-1 of a canonicalized form of the query); the pages people actually \nsee are then simply pulled from the cache.  This caching was a just \nenormous win.  In the case of the diff viewer, the header is generated \neach time, since I allow the user to select a custom style sheet (and \ndon't want to cache versions for each style sheet), but that's a trivial \ndetail.\n\n\t-hpa\n\n"},{"id":"3642","messageId":"Pine.LNX.4.58.0505201346330.2206@ppc970.osdl.org","threadId":"565","inReplyTo":"428E49DD.406@zytor.com","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-20T20:49:28Z","receivedAt":"2005-05-20T20:49:28Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Fri, 20 May 2005, H. Peter Anvin wrote:\n\n> \n> What I ended up doing for the diff viewer on kernel.org is that every \n> page that's generated gets stuffed in a cache (locklessly indexed by a \n> SHA-1 of a canonicalized form of the query); the pages people actually \n> see are then simply pulled from the cache.  This caching was a just \n> enormous win.\n\nOk. That still leaves the bandwidth issue (the full diffs are bigger than \nthe commit object), but usually the diffs in individual commits aren't \n_that_ large, so maybe it's a non-issue.\n\nOh, btw, I notice that you moved klibc over to git - care to share your\ncvs->git script (I assume you scripted it ;)? That would seem to be an \nobvious addition to the core stuff..\n\n\t\tLinus\n"},{"id":"3643","messageId":"428E4D8C.3020606@zytor.com","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505201346330.2206@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"H. Peter Anvin","fromEmail":"hpa@zytor.com","sentAt":"2005-05-20T20:50:20Z","receivedAt":"2005-05-20T20:50:20Z","isPatch":false,"sender":{"key":"hpa@zytor.com","avatar":null},"body":"Linus Torvalds wrote:\n> \n> Oh, btw, I notice that you moved klibc over to git - care to share your\n> cvs->git script (I assume you scripted it ;)? That would seem to be an \n> obvious addition to the core stuff..\n> \n\nActually, Kay did the conversion... the scripts are clearly very \ncantankerous, because if *I* run them -- I tried -- they don't work! \nSince it's Kay's work, I'll leave them to him, but I would definitely \nlove to move more of my CVS repos over to git, especially syslinux.\n\n\t-hpa\n\n"},{"id":"3648","messageId":"20050520211634.GA20003@cip.informatik.uni-erlangen.de","threadId":"565","inReplyTo":"428E4D8C.3020606@zytor.com","subject":"Re: gitweb wishlist","fromName":"Thomas Glanzmann","fromEmail":"sithglan@stud.uni-erlangen.de","sentAt":"2005-05-20T21:16:34Z","receivedAt":"2005-05-20T21:16:34Z","isPatch":false,"sender":{"key":"sithglan@stud.uni-erlangen.de","avatar":null},"body":"Hello,\nI imported the mutt-cvs for the 1.5 branch into GIT using the following\nscript. But it is a hack. I also think that I will use something like\nthat to build a CVS->GIT vendortracking.\n\ncvsps -x -z 10 -b HEAD -g -p ../../patches/\n\nAnd using the attached script to import the patches in GIT. It works\nquiet well.\n\nSee also msgid: 1115080139.21105.18.camel@localhost.localdomain there\nare the scripts which he used to convert the CVS to GIT for HPA. My\nscripts are based on his work.\n\n\tThomas\n\n\n#!/usr/bin/perl\n\nuse strict;\nuse warnings;\nuse File::Temp qw/ tempfile tempdir /;\n\n# ---------------------\n# PatchSet 1 \n# Date: 2002/07/23 07:41:30\n# Author: hpa\n# Branch: HEAD\n# Tag: (none) \n# Log:\n# Initial revision\n# \n# Members: \n# \tklibc.cvsroot/snprintf.c:INITIAL->1.1 \n# \tklibc.cvsroot/vsnprintf.c:INITIAL->1.1 \n# \tklibc.cvsroot/klibc/Makefile:INITIAL->1.1 \n# \tklibc.cvsroot/klibc/snprintf.c:INITIAL->1.1 \n# \tklibc.cvsroot/klibc/vsnprintf.c:INITIAL->1.1 \n# \n# --- /dev/null\t2005-04-30 18:00:24.840397008 +0200\n# +++ klibc/klibc.cvsroot/snprintf.c\t2005-05-02 19:57:42.879913000 +0200\n# @@ -0,0 +1,19 @@\n# +/*\n\nmy $patch = $ARGV[0];\n\nmy %committer = (\n\tbrendan  => [ 'Brendan Cully',   'brendan@kublai.com' ],\n\tme       => [ 'Michael Elkins',  'me@sigpipe.org' ],\n\troessler => [ 'Thomas Roessler', 'roessler@does-not-exist.org' ]\n);\n\nmy @log = ();\n\n$ENV{GIT_AUTHOR_EMAIL} = \"\";\n$ENV{GIT_COMMITTER_EMAIL} = \"\";\n\nopen (my $fd, $patch);\nwhile (my $line = <$fd>) {\n\tif ($line =~ m/^Date: (.*)/) {\n\t\t$ENV{GIT_AUTHOR_DATE} = $1;\n\n\t} elsif ($line =~ m/^Author: (.*)/) {\n\t\tif (defined($committer{$1})) {\n\t\t\t$ENV{GIT_COMMITTER_NAME}  = @{$committer{$1}}[0];\n\t\t\t$ENV{GIT_COMMITTER_EMAIL} = @{$committer{$1}}[1];\n\t\t\t$ENV{GIT_AUTHOR_NAME}         = @{$committer{$1}}[0];\n\t\t\t$ENV{GIT_AUTHOR_EMAIL}        = @{$committer{$1}}[1];\n\t\t} else {\n\t\t\t$ENV{GIT_COMMITTER_NAME} = $1;\n\t\t\t$ENV{GIT_AUTHOR_NAME}        = $1;\n\t\t}\n\n\t} elsif ($line =~ m/^Log:/) {\n\t\twhile (my $line = <$fd>) {\n\t\t\tif ($line =~ m/^Members: $/) {\n\t\t\t\tpop(@log);\n\t\t\t\tlast;\n\t\t\t} elsif ($line =~ /^From: (.+) <([^>]+@[^>]+)>$/) {\n\t\t\t\t$ENV{GIT_AUTHOR_NAME}  = $1;\n\t\t\t\t$ENV{GIT_AUTHOR_EMAIL} = $2;\n\t\t\t}\n\t\t\tpush @log, $line;\n\t\t}\n\t}\n}\n\nclose($fd);\n\nmy ($fh, $logfile) = tempfile(CLEANUP => 1);\nprint $fh @log;\nsystem(\"git patch $patch < $logfile\");\nclose($fh);\n"},{"id":"3649","messageId":"1116625268.12975.103.camel@dhcp-188","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505201219420.2206@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-20T21:41:07Z","receivedAt":"2005-05-20T21:41:07Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Fri, 2005-05-20 at 12:22 -0700, Linus Torvalds wrote:\n> \n> On Fri, 20 May 2005, Kay Sievers wrote:\n> > \n> > Somehting like this?:\n> >   http://kernel.org/git/?p=git/git.git;a=commitdiff;h=de809dbbce497e0d107562615c1d85ff35b4e0c5\n> \n> Btw, at least for me, this looks much more interesting than the \"commit\" \n> thing, and maybe it would make sense to make the summary links be to the \n> \"commitdiff\" instead of the \"commit\"?\n\nHow about this:\n  http://www.kernel.org/git/?p=git/git.git;a=summary\n\nThe default link is still the same, but you can use the link at the end.\n\nKay\n\n"},{"id":"3650","messageId":"1116626652.12975.118.camel@dhcp-188","threadId":"565","inReplyTo":"428E4D8C.3020606@zytor.com","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-20T22:04:12Z","receivedAt":"2005-05-20T22:04:12Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Fri, 2005-05-20 at 13:50 -0700, H. Peter Anvin wrote:\n> Linus Torvalds wrote:\n> > \n> > Oh, btw, I notice that you moved klibc over to git - care to share your\n> > cvs->git script (I assume you scripted it ;)? That would seem to be an \n> > obvious addition to the core stuff..\n> > \n> \n> Actually, Kay did the conversion... the scripts are clearly very \n> cantankerous, because if *I* run them -- I tried -- they don't work! \n> Since it's Kay's work, I'll leave them to him, but I would definitely \n> love to move more of my CVS repos over to git, especially syslinux.\n\nHere we go;\n\nThese scripts are just a quick hack, I just wanted to know how nice the\nstupid cvs file history can be converted to git-committs.\n\nIt exports the CVS repo with the help of the nice cvsps to individual\npatches. (Every patch contains something like a \"ChangeSet\" by searching\nfor file revisions with the same checkin-date)\n\nThen the patches with the header are split into individual files for\ncommitting it into git (similar to Linus' git-mbox-tools).\n\nIf we reach a CVS tag with a patch during sequential patching, the\nscript throws away the whole current working tree and checks the\nrevision out of CVS. This way we make sure, that the git-tag matches\ntree CVS has tagged. (I've encountered two mismatches in the\n\"patch-chain\" with the CVS revision-tag. These corrections are hardcoded\ninto the script. :)\n\nFor every CVS revision-tag a git-tag without any content except the name\nis created.\n\nAnd the klibc-repo was created with a patched git-commit to fake the\ncommit date with the author date. :)\n\nGood luck with it,\nKay\n"},{"id":"3651","messageId":"428E6123.8050907@zytor.com","threadId":"565","inReplyTo":"1116626652.12975.118.camel@dhcp-188","subject":"Re: gitweb wishlist","fromName":"H. Peter Anvin","fromEmail":"hpa@zytor.com","sentAt":"2005-05-20T22:13:55Z","receivedAt":"2005-05-20T22:13:55Z","isPatch":false,"sender":{"key":"hpa@zytor.com","avatar":null},"body":"Kay Sievers wrote:\n> \n> And the klibc-repo was created with a patched git-commit to fake the\n> commit date with the author date. :)\n> \n\nIn fact, I kind of wish we'd also made committer == author.\n\nSince this whole thing is an import from another revision control \nsystem, one really wants that.  It's one of those very rare situations \nin which fudging the commit date is not only fully legitimate, but darn \nnear required.\n\n\t-hpa\n\n"},{"id":"3653","messageId":"Pine.LNX.4.58.0505201604460.2206@ppc970.osdl.org","threadId":"565","inReplyTo":"1116626652.12975.118.camel@dhcp-188","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-20T23:25:10Z","receivedAt":"2005-05-20T23:25:10Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Sat, 21 May 2005, Kay Sievers wrote:\n> \n> These scripts are just a quick hack, I just wanted to know how nice the\n> stupid cvs file history can be converted to git-committs.\n\nUgh, indeed.\n\nIs it a cvsps bug or what that causes you to have to re-order the patches?  \nOr is it that you don't handle branches or something in CVS? The fact that\nyou also remove one of the tags \"suppress ash-branch\" in that same number\nsequence that you had to fix up by re-ordering seems to imply that the\nbreakage has something to do with branching.\n\nDoes anybody have any suggestions for a nice and smallish CVS project that\nhas branches that I should look at?\n\n\t\tLinus\n"},{"id":"3661","messageId":"Pine.LNX.4.58.0505201702170.2206@ppc970.osdl.org","threadId":"565","inReplyTo":"428E745C.30304@zytor.com","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-21T00:50:25Z","receivedAt":"2005-05-21T00:50:25Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n[ Thomas added to cc, since he seems to have also worked on this ]\n\nOn Fri, 20 May 2005, H. Peter Anvin wrote:\n> \n> Here is my \"main\" OSS CVS repository; look at the syslinux module.  It \n> has at least some minor branching.\n\nOk, \"cvsps\" output scares me. I wonder what\n\n\tWARNING: Invalid PatchSet 775, Tag syslinux-2_12-pre7:\n\t    memdisk/init32.asm:1.3=after, memdisk/Makefile:1.26=before. Treated as 'before'\n\tWARNING: Invalid PatchSet 775, Tag syslinux-2_12-pre7:\n\t    memdisk/init32.asm:1.3=after, memdisk/e820test.c:1.7=before. Treated as 'before'\n\t...\n\nmeans..\n\nAlso, your syslinux repo is interesting and shows another thing: doing a\n\n\tcvsps -g -p separate\n\nends badly with\n\n\tDirecting PatchSet 938 to file separate/938.patch\n\tcvs rdiff: failed to read diff file header /tmp/cvso8PswZ for mdiskchk.com,v: end of file\n\tsystem command returned non-zero exit status: 1: aborting\n\nwhich doesn't look very promising and causes an empty diff for\nmdiskck.com. Trying with --cvs-direct shows the reason:\n\n\tIndex: syslinux/sample/mdiskchk.com\n\t===================================================================\n\tRCS file: \n\t/home/torvalds/src/osscvs/cvsroot/syslinux/sample/mdiskchk.com,v\n\tretrieving revision 1.1\n\tretrieving revision 1.2\n\tdiff -u -r1.1 -r1.2\n\tBinary files /tmp/cvsU6MGU0 and /tmp/cvsiskFVR differ\n\nwhich shows that anything that bases itself of diffs (ie uses \"-g\" with\ncvsps) is just doomed to failure, since there's no good way to handle\nbinary data. Both Kay's and Thomas' scripts try to do the \"-g\" thing, \nthat's just not right.\n\nSo the cvs->git thing would need to be based on the actual objects, which \nobviously fits git quite well, but I was really hoping to have cvsps give \nsome nice intermediate format..\n\nSo it looks like we should avoid the diff format, and instead use\n\n\tcvsps -p separate\n\nand then just parse the \"Members\" thing and turning each of them either\ninto a \"delete\"  (for ->.*DEAD) or \"cvs checkout -rxxx\" (for \".*->xxx\").\n\nHandling branches by literally treating them as different heads in git \nsounds quite simple, and indeed it looks like the basic logic for cvs->git \ntranslation would be\n\n\tfor-each-patch-from-cvsps\n\tdo\n\t\tgit-read-tree -m branchname-from-patch\n\t\tgit-update-cache -f -u -q -a\n\t\tfor-each-member-in-patch\n\t\tdo\n\t\t\tif [ DEAD ]; then\n\t\t\t\trm member\n\t\t\t\tgit-update-cache --remove member\n\t\t\telse\n\t\t\t\tcvs co -rREV member\n\t\t\t\tgit-update-cache --add member\n\t\t\tfi\n\t\t\tcat commit-message-from-patch | \n\t\t\t\tgit-commit-tree $(git-write-tree) -p branchname-from-patch > .git/revs/heads/branchname-from-patch\n\t\tdone\n\tdone\n\nwhich looks like it should work, and handle binary files right.\n\nThere seems to be two questions:\n\n - what to do about branch creation (ie a branch name we haven't seen\n   before): it looks like cvsps doesn't tell you what the _originating_\n   branch was for a new branch (that may be my confusion - maybe you can't\n   create branches off branches in CVS?)\n\n   For syslinux, it looks like you can always base it on HEAD, or possibly \n   just the previous patch (which looks like it is always HEAD). The above \n   pseudo-script will actually do that automatically, simply by virtue of\n   the \"git-read-tree -m\" at the top of the loop failing when the\n   branchname doesn't exist yet.\n\n - whether to bother to create merge entries for when somebody tried to \n   merge a branch back or forth in CVS. \n\n   CVS fundamentally doesn't have the notion of such a thing, and cvsps \n   can't either. But we could try to guess, based on the commit message, \n   perhaps.\n\n   NOTE! Such a \"merge\" would not have any real GIT merge functionality \n   what-so-ever. It would just introduce a second parent into the commit, \n   nothing more.\n\nBah. What crud.\n\n\t\tLinus\n"},{"id":"3684","messageId":"pan.2005.05.21.07.29.14.58375@smurf.noris.de","threadId":"565","inReplyTo":"1116611932.12975.22.camel@dhcp-188","subject":"Re: gitweb wishlist","fromName":"Matthias Urlichs","fromEmail":"smurf@smurf.noris.de","sentAt":"2005-05-21T07:29:16Z","receivedAt":"2005-05-21T07:29:16Z","isPatch":false,"sender":{"key":"matthias@urlichs.de","avatar":"https://gravatar.com/avatar/2708905af227313eba6f2b2ae0f7d0259b5ac5d71baef58fe5a13c699ce0bbf0?d=mp&s=160"},"body":"Hi, Kay Sievers wrote:\n\n> Something like that: :)\n\nCool.\n\nMore feature requests:  ;-)\n- Alternate white and almost-white backgrounds in the lists (all of them ;-)\n  so that wide-screened people like me don't lose context when their eyes\n  travel the long road from left to right edge of the screen. ;-)\n\n- Merges currently don't have diff links. It'd be nice to have one for\n  each parent.\n\n- File diffs have the \"diff\" link on the *parent*, not on the child.\n  That's counter-intuitive -- if I want to see what the Foo patch changes,\n  I should be able to click on the \"diff\" link on _that_ line, not the one\n  below it. Example:\nhttp://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=history;h=9636273dae265b9354b861b373cd43cd76a6d0fe;f=MAINTAINERS\n\n-- \nMatthias Urlichs   |   {M:U} IT Design @ m-u-it.de   |  smurf@smurf.noris.de\n\n\n"},{"id":"3685","messageId":"pan.2005.05.21.07.35.29.758035@smurf.noris.de","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505201702170.2206@ppc970.osdl.org","subject":"cvs->git (was Re: gitweb wishlist)","fromName":"Matthias Urlichs","fromEmail":"smurf@smurf.noris.de","sentAt":"2005-05-21T07:35:30Z","receivedAt":"2005-05-21T07:35:30Z","isPatch":false,"sender":{"key":"matthias@urlichs.de","avatar":"https://gravatar.com/avatar/2708905af227313eba6f2b2ae0f7d0259b5ac5d71baef58fe5a13c699ce0bbf0?d=mp&s=160"},"body":"Hi, Linus Torvalds wrote:\n\n> Bah. What crud.\n\nI have an old CVS->BK merge script lying around which does all of this\nreasonably correctly. If somebody wants to git-ify it, be my guest\n(I won't have time in the foreseeable futurre :-( ); it's in the\nrsync://server.smurf.noris.de/sourcemgr.git/#main repository as\nbin/b.cvs{,.pl}.\n\n-- \nMatthias Urlichs   |   {M:U} IT Design @ m-u-it.de   |  smurf@smurf.noris.de\n\n\n"},{"id":"3699","messageId":"1116695650.19541.12.camel@dhcp-188.off.vrfy.org","threadId":"565","inReplyTo":"pan.2005.05.21.07.29.14.58375@smurf.noris.de","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-21T17:14:09Z","receivedAt":"2005-05-21T17:14:09Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Sat, 2005-05-21 at 09:29 +0200, Matthias Urlichs wrote:\n> Hi, Kay Sievers wrote:\n> \n> > Something like that: :)\n> \n> Cool.\n> \n> More feature requests:  ;-)\n> - Alternate white and almost-white backgrounds in the lists (all of them ;-)\n>   so that wide-screened people like me don't lose context when their eyes\n>   travel the long road from left to right edge of the screen. ;-)\n\nDone!\n\n> - Merges currently don't have diff links. It'd be nice to have one for\n>   each parent.\n\nDone! But I'm not sure if that is really useful. It may create a very\nvery big diff. :)\n\n> - File diffs have the \"diff\" link on the *parent*, not on the child.\n>   That's counter-intuitive -- if I want to see what the Foo patch changes,\n>   I should be able to click on the \"diff\" link on _that_ line, not the one\n>   below it. Example:\n> http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=history;h=9636273dae265b9354b861b373cd43cd76a6d0fe;f=MAINTAINERS\n\nNo, the \"diff\" link is a diff against the current commit not an\nincremental one from revision to revision. Me may change that, I'm not\nsure what's the best here.\n\nKay\n\n"},{"id":"3839","messageId":"4292A08A.5050108@cobite.com","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505201702170.2206@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"David Mansfield","fromEmail":"david@cobite.com","sentAt":"2005-05-24T03:33:30Z","receivedAt":"2005-05-24T03:33:30Z","isPatch":false,"sender":{"key":"david@cobite.com","avatar":null},"body":"Hi Linus,\n\nLinus Torvalds wrote:\n> [ Thomas added to cc, since he seems to have also worked on this ]\n> \n> On Fri, 20 May 2005, H. Peter Anvin wrote:\n> \n>>Here is my \"main\" OSS CVS repository; look at the syslinux module.  It \n>>has at least some minor branching.\n> \n> \n> Ok, \"cvsps\" output scares me. I wonder what\n> \n> \tWARNING: Invalid PatchSet 775, Tag syslinux-2_12-pre7:\n> \t    memdisk/init32.asm:1.3=after, memdisk/Makefile:1.26=before. Treated as 'before'\n> \tWARNING: Invalid PatchSet 775, Tag syslinux-2_12-pre7:\n> \t    memdisk/init32.asm:1.3=after, memdisk/e820test.c:1.7=before. Treated as 'before'\n> \t...\n> \n> means..\n> \n\nOk.  I'll tell you.  It means that the committer uses bad practices in \ntagging ;-)  It generally means that force tag (cvs tag -F <file>) was \nused on a specific file.  Here's the scenario:\n\ncvsps is trying to associate a tag to a specific commit.  But in the cvs \nworld this is not always at all possible.  If, for example, a commit \nmade and  all files are tagged.  Now some random file is modified and \ncommitted.  Then, a bug is found in a file from the previously tagged \nset, say the file 'memdisk/init32.asm'.  The bug is fixed, committed and \nthe tag is MOVED for _just that file_ forward to the new version.  Now \nthere is no commit that can be associated with the tag.  In this case, \ncvsps believes this to be a 'FUNKY' tag.  There is a more pathological \ncase having to do with 'INVALID' tags...  It's enough to make a grown \nman cry.\n\n> Also, your syslinux repo is interesting and shows another thing: doing a\n> \n> \tcvsps -g -p separate\n> \n> ends badly with\n> \n> \tDirecting PatchSet 938 to file separate/938.patch\n> \tcvs rdiff: failed to read diff file header /tmp/cvso8PswZ for mdiskchk.com,v: end of file\n> \tsystem command returned non-zero exit status: 1: aborting\n> \n> which doesn't look very promising and causes an empty diff for\n> mdiskck.com. Trying with --cvs-direct shows the reason:\n> \n> \tIndex: syslinux/sample/mdiskchk.com\n> \t===================================================================\n> \tRCS file: \n> \t/home/torvalds/src/osscvs/cvsroot/syslinux/sample/mdiskchk.com,v\n> \tretrieving revision 1.1\n> \tretrieving revision 1.2\n> \tdiff -u -r1.1 -r1.2\n> \tBinary files /tmp/cvsU6MGU0 and /tmp/cvsiskFVR differ\n> \n> which shows that anything that bases itself of diffs (ie uses \"-g\" with\n> cvsps) is just doomed to failure, since there's no good way to handle\n> binary data. Both Kay's and Thomas' scripts try to do the \"-g\" thing, \n> that's just not right.\n> \n\nI accept patches ;-)  Honestly, handling binary data should be trivial I \njust haven't had the interest, and surprisingly noone else on the \ninternet ever has.  The only binary file in the kernel appears to be the \nlogo.gif, according to Ingo.\n\n[ discussion on working around broken handling of binary files in cvsps]\n> \n> There seems to be two questions:\n> \n>  - what to do about branch creation (ie a branch name we haven't seen\n>    before): it looks like cvsps doesn't tell you what the _originating_\n>    branch was for a new branch (that may be my confusion - maybe you can't\n>    create branches off branches in CVS?)\n> \n>    For syslinux, it looks like you can always base it on HEAD, or possibly \n>    just the previous patch (which looks like it is always HEAD). The above \n>    pseudo-script will actually do that automatically, simply by virtue of\n>    the \"git-read-tree -m\" at the top of the loop failing when the\n>    branchname doesn't exist yet.\n> \n\nSee attached patch to cvsps.c which displays 'Ancestor branch' when this \ndiffers from Branch.\n\n>  - whether to bother to create merge entries for when somebody tried to \n>    merge a branch back or forth in CVS. \n> \n>    CVS fundamentally doesn't have the notion of such a thing, and cvsps \n>    can't either. But we could try to guess, based on the commit message, \n>    perhaps.\n> \n>    NOTE! Such a \"merge\" would not have any real GIT merge functionality \n>    what-so-ever. It would just introduce a second parent into the commit, \n>    nothing more.\n> \n> Bah. What crud.\n> \n\nHey, a polished turd is only so shiny...  cvsps is a 99% solution [to \nthe problem of extracting metatdata from cvs] only and cvs makes the \nother 1% impossible.\n\nDavid\n\n\n--- cvsps.c~\t2003-04-11 10:06:01.000000000 -0400\n+++ cvsps.c\t2005-05-23 23:26:12.110231536 -0400\n@@ -1402,6 +1402,16 @@\n \t   tm->tm_hour, tm->tm_min, tm->tm_sec);\n     printf(\"Author: %s\\n\", ps->author);\n     printf(\"Branch: %s\\n\", ps->branch);\n+    \n+    /* check if ancestor was different branch */\n+    if (!list_empty(&ps->members)) \n+    {\n+\t    PatchSetMember * psm = list_entry(ps->members.next, PatchSetMember, link);\n+\t    const char * abr = psm->pre_rev ? psm->pre_rev->branch : NULL;\n+\t    if (abr && strcmp(ps->branch, abr) != 0)\n+\t\t    printf(\"Ancestor branch: %s\\n\", abr);\n+    }\n+\n     printf(\"Tag: %s %s\\n\", ps->tag ? ps->tag : \"(none)\", tag_flag_descr[ps->tag_flags]);\n     printf(\"Log:\\n%s\\n\", ps->descr);\n     printf(\"Members: \\n\");\n"},{"id":"3840","messageId":"4292A1F2.7020606@zytor.com","threadId":"565","inReplyTo":"4292A08A.5050108@cobite.com","subject":"Re: gitweb wishlist","fromName":"H. Peter Anvin","fromEmail":"hpa@zytor.com","sentAt":"2005-05-24T03:39:30Z","receivedAt":"2005-05-24T03:39:30Z","isPatch":false,"sender":{"key":"hpa@zytor.com","avatar":null},"body":"David Mansfield wrote:\n> \n> Ok.  I'll tell you.  It means that the committer uses bad practices in \n> tagging ;-)  It generally means that force tag (cvs tag -F <file>) was \n> used on a specific file.  Here's the scenario:\n> \n> cvsps is trying to associate a tag to a specific commit.  But in the cvs \n> world this is not always at all possible.  If, for example, a commit \n> made and  all files are tagged.  Now some random file is modified and \n> committed.  Then, a bug is found in a file from the previously tagged \n> set, say the file 'memdisk/init32.asm'.  The bug is fixed, committed and \n> the tag is MOVED for _just that file_ forward to the new version.  Now \n> there is no commit that can be associated with the tag.  In this case, \n> cvsps believes this to be a 'FUNKY' tag.  There is a more pathological \n> case having to do with 'INVALID' tags...  It's enough to make a grown \n> man cry.\n> \n\nThis is only pathological if the tag now represents a state that never \nactually existed in the history of the repository.  I don't believe \nthere are any such cases in the syslinux repository; I could be wrong, \nbut I am *highly* sceptical.\n\n> \n> I accept patches ;-)  Honestly, handling binary data should be trivial I \n> just haven't had the interest, and surprisingly noone else on the \n> internet ever has.  The only binary file in the kernel appears to be the \n> logo.gif, according to Ingo.\n> \n> [ discussion on working around broken handling of binary files in cvsps]\n> \n\nActually, as long as we can create the tree that exists between each \nchangeset, we should be OK.\n\n> \n> Hey, a polished turd is only so shiny...  cvsps is a 99% solution [to \n> the problem of extracting metatdata from cvs] only and cvs makes the \n> other 1% impossible.\n> \n\nNo sh*t...\n\n\t-hpa\n"},{"id":"3841","messageId":"Pine.LNX.4.58.0505232048190.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"4292A08A.5050108@cobite.com","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T03:52:26Z","receivedAt":"2005-05-24T03:52:26Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Mon, 23 May 2005, David Mansfield wrote:\n> > \n> > Bah. What crud.\n> > \n> \n> Hey, a polished turd is only so shiny...  cvsps is a 99% solution [to \n> the problem of extracting metatdata from cvs] only and cvs makes the \n> other 1% impossible.\n\nThe \"what crud\" refers to cvs. cvsps seems to be a great way to make a\ntool to migrate away from CVS (or if forced to use CVS, at least show it\nin a sane manner). So don't take it the wrong way.\n\nI've gotten side-tracked with purely git issues, and since I don't \nactually have any CVS archives, the cvs->git translation will be on the \nback-burner for a while, but your \"Ancestor branch\" patch seems to at \nleast solve the problem that cvsps didn't show all the information that \nwas there. So now I know how to do branches, even if I don't think I'd \never _really_ merge them back (which is as much info as CVS contains). \n\nThey'd just be dangling references, ie you could get to them if you wanted \nto, for historical reasons, and they could be merged merged by hand, of \ncourse. Some day..\n\n\t\tLinus\n"},{"id":"3842","messageId":"4292AD5E.3000106@cobite.com","threadId":"565","inReplyTo":"4292A1F2.7020606@zytor.com","subject":"Re: gitweb wishlist","fromName":"David Mansfield","fromEmail":"david@cobite.com","sentAt":"2005-05-24T04:28:14Z","receivedAt":"2005-05-24T04:28:14Z","isPatch":false,"sender":{"key":"david@cobite.com","avatar":null},"body":"H. Peter Anvin wrote:\n> David Mansfield wrote:\n> \n>>\n>> Ok.  I'll tell you.  It means that the committer uses bad practices in \n>> tagging ;-)  It generally means that force tag (cvs tag -F <file>) was \n>> used on a specific file.  Here's the scenario:\n>>\n>> cvsps is trying to associate a tag to a specific commit.  But in the \n>> cvs world this is not always at all possible.  If, for example, a \n>> commit made and  all files are tagged.  Now some random file is \n>> modified and committed.  Then, a bug is found in a file from the \n>> previously tagged set, say the file 'memdisk/init32.asm'.  The bug is \n>> fixed, committed and the tag is MOVED for _just that file_ forward to \n>> the new version.  Now there is no commit that can be associated with \n>> the tag.  In this case, cvsps believes this to be a 'FUNKY' tag.  \n>> There is a more pathological case having to do with 'INVALID' tags...  \n>> It's enough to make a grown man cry.\n>>\n> \n> This is only pathological if the tag now represents a state that never \n> actually existed in the history of the repository.  I don't believe \n> there are any such cases in the syslinux repository; I could be wrong, \n> but I am *highly* sceptical.\n> \n\nI didn't mean that YOUR repository had more pathological stuff in it, \njust that SOME do.  'FUNKY' tags are not really that bad, it's just that \nthere is not a single commit to assign them to (i.e. at no point were \nall of the objects in the repository at that state simultaneously), \nwhich makes the import of such a tag difficult into a more commit \noriented system.\n\nAnother way to reach 'funky'ness is to modify a file, commit and tag, \nwithout having done a 'cvs update' first (and a colleague has done a \ncommit since your last 'cvs update')\n\nDavid\n\n\n\n"},{"id":"3843","messageId":"20050524045840.GI12141@cip.informatik.uni-erlangen.de","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505201702170.2206@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Thomas Glanzmann","fromEmail":"sithglan@stud.uni-erlangen.de","sentAt":"2005-05-24T04:58:40Z","receivedAt":"2005-05-24T04:58:40Z","isPatch":false,"sender":{"key":"sithglan@stud.uni-erlangen.de","avatar":null},"body":"Hello,\n\n> \tWARNING: Invalid PatchSet 775, Tag syslinux-2_12-pre7:\n> \t    memdisk/init32.asm:1.3=after, memdisk/Makefile:1.26=before. Treated as 'before'\n> \tWARNING: Invalid PatchSet 775, Tag syslinux-2_12-pre7:\n> \t    memdisk/init32.asm:1.3=after, memdisk/e820test.c:1.7=before. Treated as 'before'\n> \t...\n\nactually I think this is the broken upstream version. It can't parse\ndates right. Just look at the exported patches and see if them all from\n1970. However the debian package has a patch in which solves it:\n\nmaybe you should try with the attached patch or with the version that\ncomes with debian sarge. I also reported this problem a while back to\nthe original author.\n\n\tThomas\n\n\n--- cvsps-2.0rc1.orig/util.c\n+++ cvsps-2.0rc1/util.c\n@@ -13,6 +13,7 @@\n #include <time.h>\n #include <errno.h>\n #include <signal.h>\n+#include <regex.h>\n #include <sys/stat.h>\n #include <sys/time.h>\n #include <sys/types.h>\n@@ -140,24 +141,51 @@\n     return *res;\n }\n \n+static int get_int_substr(const char * str, const regmatch_t * p)\n+{\n+    char buff[256];\n+    memcpy(buff, str + p->rm_so, p->rm_eo - p->rm_so);\n+    buff[p->rm_eo - p->rm_so] = 0;\n+    return atoi(buff);\n+}\n+\n void convert_date(time_t * t, const char * dte)\n {\n-    /* HACK: this routine parses two formats,\n-     * 1) 'cvslog' format YYYY/MM/DD HH:MM:SS\n-     * 2) time_t formatted as %d\n-     */\n-       \n-    if (strchr(dte, '/'))\n+    static regex_t date_re;\n+    static int init_re;\n+\n+#define MAX_MATCH 16\n+    size_t nmatch = MAX_MATCH;\n+    regmatch_t match[MAX_MATCH];\n+\n+    if (!init_re) \n+    {\n+\tif (regcomp(&date_re, \"([0-9]{4})[-/]([0-9]{2})[-/]([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})\", REG_EXTENDED)) \n+\t{\n+\t    fprintf(stderr, \"FATAL: date regex compilation error\\n\");\n+\t    exit(1);\n+\t}\n+\tinit_re = 1;\n+    }\n+    \n+    if (regexec(&date_re, dte, nmatch, match, 0) == 0)\n     {\n+\tregmatch_t * pm = match;\n \tstruct tm tm;\n+\n+\t/* first regmatch_t is match location of entire re */\n+\tpm++;\n \t\n-\tmemset(&tm, 0, sizeof(tm));\n-\tsscanf(dte, \"%d/%d/%d %d:%d:%d\", \n-\t       &tm.tm_year, &tm.tm_mon, &tm.tm_mday, \n-\t       &tm.tm_hour, &tm.tm_min, &tm.tm_sec);\n-\t\n+\ttm.tm_year = get_int_substr(dte, pm++);\n+\ttm.tm_mon  = get_int_substr(dte, pm++);\n+\ttm.tm_mday = get_int_substr(dte, pm++);\n+\ttm.tm_hour = get_int_substr(dte, pm++);\n+\ttm.tm_min  = get_int_substr(dte, pm++);\n+\ttm.tm_sec  = get_int_substr(dte, pm++);\n+\n \ttm.tm_year -= 1900;\n \ttm.tm_mon--;\n+\ttm.tm_isdst = 0;\n \t\n \t*t = mktime(&tm);\n     }\n"},{"id":"3844","messageId":"4292B5E3.2080505@zytor.com","threadId":"565","inReplyTo":"4292AD5E.3000106@cobite.com","subject":"Re: gitweb wishlist","fromName":"H. Peter Anvin","fromEmail":"hpa@zytor.com","sentAt":"2005-05-24T05:04:35Z","receivedAt":"2005-05-24T05:04:35Z","isPatch":false,"sender":{"key":"hpa@zytor.com","avatar":null},"body":"David Mansfield wrote:\n>>\n>> This is only pathological if the tag now represents a state that never \n>> actually existed in the history of the repository.  I don't believe \n>> there are any such cases in the syslinux repository; I could be wrong, \n>> but I am *highly* sceptical.\n> \n> I didn't mean that YOUR repository had more pathological stuff in it, \n> just that SOME do.  'FUNKY' tags are not really that bad, it's just that \n> there is not a single commit to assign them to (i.e. at no point were \n> all of the objects in the repository at that state simultaneously), \n> which makes the import of such a tag difficult into a more commit \n> oriented system.\n> \n> Another way to reach 'funky'ness is to modify a file, commit and tag, \n> without having done a 'cvs update' first (and a colleague has done a \n> commit since your last 'cvs update')\n> \n\nNot sure, sounds more likely.\n\nEither which way, I guess there are two ways to deal with them in 'git'; \neither as standalone trees (tags pointing to tree objects), or probably \nmore sensical, as impromptu branches if one can find a sane origin object.\n\n\t-hpa\n"},{"id":"3850","messageId":"Pine.LNX.4.58.0505240110580.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505232048190.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T08:25:19Z","receivedAt":"2005-05-24T08:25:19Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Mon, 23 May 2005, Linus Torvalds wrote:\n> \n> I've gotten side-tracked with purely git issues, and since I don't \n> actually have any CVS archives, the cvs->git translation will be on the \n> back-burner for a while, but your \"Ancestor branch\" patch seems to at \n> least solve the problem that cvsps didn't show all the information that \n> was there.\n\nNaff.\n\nI just checked in a \"cvs2git.c\" file in the \"tools\" project (which has my \npatch application stuff).\n\nIt's still buggy, and it's hacky as hell, but you can basically do \nsomething like this:\n\n\tcvsps | cvs2git > script\n\nwith the normal setup for \"cvsps\", and \"cvs2git\" needs one additional\nstage, namely it wants to know the RCSDIR where to find the RCS files\n(that should be basically \"$CVSROOT/module\").\n\nThat _script_ then creates a git archive. Very hacky. So after you've \nsuccessfully created the conversion script, check it to see that it looks \nsane, and then do\n\n\tsh script\n\nand the end result is a git'ified version of your CVS repo (and a \ncorrupted working directory, btw, so look out. It _shouldn't_ corrupt \nyour old CVS repo, though, so it should be ok).\n\nIt has the logic for branches, but it doesn't work, and I'm fed up enough\nwith CVS and RCS for the moment that I'm not going to work on it any more\ntonight. I don't know what stupid bug I have (I've had about a million of\nthem on this silly program), but it's at a point where I think others\nmight find it interesting, and it's probably/hopefully some really\nembarrassing typo or something and easily fixed.\n\nIt converted Peter's \"syslinux\" repository in a couple of minutes, \nresulting in 1038 commits (it _should_ have resulted in 1046 commits, \nthat's the branch thing afaik) and most of it looks sane:\n\n\tdiff-tree cfb715c827e19226a446d47c98a7460fd94633ff (from a809559323f1b370717e475dd252b24686f97727)\n\tAuthor: hpa <hpa>\n\tDate:   Thu May 19 22:30:50 2005 -0700\n\t    \n\t    gcc4 compilation fix\n\t\n\t\n\tdiff-tree a809559323f1b370717e475dd252b24686f97727 (from 4d65331b50a7b5ce858bb55a58f37b17ebc26c72)\n\tAuthor: hpa <hpa>\n\tDate:   Sun May 8 22:47:03 2005 -0700\n\t    \n\t    New Multiboot module; increase command line limit to 1023\n\t\n\t\n\tdiff-tree 4d65331b50a7b5ce858bb55a58f37b17ebc26c72 (from e88244753d528f695790adc96f0542d20dc33882)\n\tAuthor: hpa <hpa>\n\tDate:   Fri Apr 29 07:08:03 2005 -0700\n\t    \n\t    Don't clobber live registers, it's not nice\n\t\n\t\n\tdiff-tree e88244753d528f695790adc96f0542d20dc33882 (from a49e189e35d208648a0d0b52ff652a5f3f8a707e)\n\tAuthor: hpa <hpa>\n\tDate:   Fri Apr 29 07:05:52 2005 -0700\n\t    \n\t    Use the correct register\n\n\t...\n\t...\n\t...\n\n\tdiff-tree 350772d45425a85dae86ec721d6bd3fde5595d50 (from 47ee894e7821f50cb83ea14b08132337577b2a1e)\n\tAuthor: hpa <hpa>\n\tDate:   Sat Jan 31 13:24:35 1998 -0800\n\t    \n\t    Slightly less ugly Id tag.\n\t\n\t\n\tdiff-tree 47ee894e7821f50cb83ea14b08132337577b2a1e (from a8b52f1c31055049b276d14c67436d06dd7757aa)\n\tAuthor: hpa <hpa>\n\tDate:   Sat Jan 31 13:22:38 1998 -0800\n\t    \n\t    Added Id tags.\n\t\n\t\n\tdiff-tree b924672aadb2c3b7f3cac1aaf52fbb4a1ed86b8d (from root)\n\tAuthor: hpa <hpa>\n\tDate:   Sat Jan 31 13:16:05 1998 -0800\n\t    \n\t    Initial revision\n\nAnd btw, it's definitely cvsps that does all the heavy lifting here. \n\"cvs2git\" itself is 255 lines of horrid crud, and should have been \nwritten in perl, except I only do C..\n\n\t\tLinus\n"},{"id":"3854","messageId":"Pine.LNX.4.58.0505240849050.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505240110580.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T16:00:57Z","receivedAt":"2005-05-24T16:00:57Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Linus Torvalds wrote:\n> \n> It has the logic for branches, but it doesn't work, and I'm fed up enough\n> with CVS and RCS for the moment that I'm not going to work on it any more\n> tonight.\n\nI'm back, and yes, it was a really stupid thing.\n\nHowever, David, I need more help deciphering \"cvsps\" output..\n\nFixing the branch handling shows that cvsps does some really strange\nthings with the newly added \"Ancestor grpah\". Here's one example:\n\n\t---------------------\n\tPatchSet 372 \n\tDate: 2002/02/03 21:37:50\n\tAuthor: hpa\n\tBranch: syslinux-1_6x-1\n\tAncestor branch: HEAD\n\tTag: syslinux-1_67 \n\tLog:\n\tNew mailing list information\n\t\n\tMembers: \n\t        syslinux.doc:1.48->1.48.2.1 \n\t\n\t---------------------\n\tPatchSet 373 \n\tDate: 2002/02/11 23:08:47\n\tAuthor: hpa\n\tBranch: HEAD\n\tTag: (none) \n\tLog:\n\ttftpd32 needs version 2.11 or later.\n\t\n\tMembers: \n\t        pxelinux.doc:1.28->1.29 \n\t\n\t---------------------\n\tPatchSet 374 \n\tDate: 2002/02/18 23:43:43\n\tAuthor: hpa\n\tBranch: syslinux-1_6x-1\n\tAncestor branch: HEAD\n\tTag: syslinux-1_6x-merge-2 \n\tLog:\n\tActually make the -o option work properly.\n\t\n\tMembers: \n\t        syslinux.c:1.13->1.13.2.1 \n\t\n\t---------------------\n\nnote how both 372 _and_ 374 claim to have HEAD as their ancestor, and are \non the \"syslinux-1_6x-1\" branch. What's up with that? Right now this \ncauses my git archive to first create 372 as a branch off HEAD, and then \noverwrite that with 374, resulting in a dangling branch for 372 that \n_exists_, but it's not reachable any more, because the branch name that it \nused has been overwritten by the _new_ branch off HEAD.\n\nSide note: cvs2git is pretty robust since it doesn't rely on patches\nanywhere, so the head of the branch likely ends up being correct, if that\n\"syslinux.doc\" file has been modified anywhere else in the branch. So this\n_usually_ just results in (a) git-fsck-cache complaining about unreachable\ncommits and (b) possible history being hard to find.\n\nMaybe this cvs2git behaviour is the right thing to do, and what really\nhappened was that the changes described by PatchSet 372 aren't really\navailable any more even in CVS, unless you go back by date or something \nlike that.\n\nHowever, I suspect it's a cvsps bug in the \"ancestor branch\" thing. I\ncould work around it by just saying \"if I have already seen this branch,\nI'll ignore the ancestor information\".\n\nSo I'd like to know whether this is a cvsps issue or whether I actually\nended up doing the right thing and it really should be a dangling\nbranch-name that got re-used...\n\n(And if it's a cvsps issue, I'd obviously prefer to get a cvsps patch \ninstead of having a questionable workaround in cvs2git).\n\n\"Davi-Mansfieldobi, you're our only hope..\"\n\n\t\tLinus\n"},{"id":"3856","messageId":"42935322.6070902@cobite.com","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505240110580.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"David Mansfield","fromEmail":"david@cobite.com","sentAt":"2005-05-24T16:15:30Z","receivedAt":"2005-05-24T16:15:30Z","isPatch":false,"sender":{"key":"david@cobite.com","avatar":null},"body":"Linus Torvalds wrote:\n> \n> On Mon, 23 May 2005, Linus Torvalds wrote:\n> \n>>I've gotten side-tracked with purely git issues, and since I don't \n>>actually have any CVS archives, the cvs->git translation will be on the \n>>back-burner for a while, but your \"Ancestor branch\" patch seems to at \n>>least solve the problem that cvsps didn't show all the information that \n>>was there.\n> \n> \n> Naff.\n> \n> I just checked in a \"cvs2git.c\" file in the \"tools\" project (which has my \n> patch application stuff).\n> \n> It's still buggy, and it's hacky as hell, but you can basically do \n> something like this:\n> \n> \tcvsps | cvs2git > script\n> \n> with the normal setup for \"cvsps\", and \"cvs2git\" needs one additional\n> stage, namely it wants to know the RCSDIR where to find the RCS files\n> (that should be basically \"$CVSROOT/module\").\n> \n> That _script_ then creates a git archive. Very hacky. So after you've \n> successfully created the conversion script, check it to see that it looks \n> sane, and then do\n> \n> \tsh script\n> \n> and the end result is a git'ified version of your CVS repo (and a \n> corrupted working directory, btw, so look out. It _shouldn't_ corrupt \n> your old CVS repo, though, so it should be ok).\n\nI'll take a look.  One problem is that many folks use non-local cvs... \nnot sure if that will be an issue.  I'll look to cleaning this up if \nnecessary.\n\n> \n> It has the logic for branches, but it doesn't work, and I'm fed up enough\n> with CVS and RCS for the moment that I'm not going to work on it any more\n> tonight. I don't know what stupid bug I have (I've had about a million of\n> them on this silly program), but it's at a point where I think others\n> might find it interesting, and it's probably/hopefully some really\n> embarrassing typo or something and easily fixed.\n> \n\nI actually found an issue with the 30-second ancestor branch patch I \nsent and I'm doing that one properly now.  Once that's done I can look \nat the branch capture logic in cvs2git and see if anything pops out.\n\n\n> It converted Peter's \"syslinux\" repository in a couple of minutes, \n> resulting in 1038 commits (it _should_ have resulted in 1046 commits, \n> that's the branch thing afaik) and most of it looks sane:\n\nReally cool.  What's 8 commits between friends?\n\nDavid\n"},{"id":"3855","messageId":"Pine.LNX.4.58.0505240911050.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505240849050.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T16:16:25Z","receivedAt":"2005-05-24T16:16:25Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Linus Torvalds wrote:\n> \n> Fixing the branch handling shows that cvsps does some really strange\n> things with the newly added \"Ancestor grpah\". Here's one example:\n\nAhh, looking at cvsps source, I think I see what's going on. \n\nIt's deciding the \"previous branch\" by looking at what the previous branch \nfor the first individual file in the PatchSet was, which fails because in \nthis case, PatchSet 372 was changing \"syslinux.doc\", and Patchset 374 was \nchanging \"syslinux.c\", and thus the previous version of the individual \n_files_ were both in the HEAD branch.\n\nSo it does look like I should just ignore the \"Ancestor branch\" \ninformation if the new branch already existed.\n\nOf course, some semantics will never be translatable when trying to treat \nCVS as a sane system (ie treating CVS as if it was changeset-based is \nalways going to cause strange corner cases since it really is file-based), \nbut that should most likely give the best approximation of what a \nconversion should do.\n\n\t\tLinus\n"},{"id":"3857","messageId":"20050524161745.GA9537@cip.informatik.uni-erlangen.de","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505240110580.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Thomas Glanzmann","fromEmail":"sithglan@stud.uni-erlangen.de","sentAt":"2005-05-24T16:17:45Z","receivedAt":"2005-05-24T16:17:45Z","isPatch":false,"sender":{"key":"sithglan@stud.uni-erlangen.de","avatar":null},"body":"Hello Linus,\nI tried cvs2git and have the following problem:\n\n\t---------------------\n\tPatchSet 26\n\tDate: 1998/06/20 03:53:44\n\tAuthor: roessler\n\tBranch: mutt-0-93\n\tAncestor branch: HEAD\n\tTag: (none)\n\tLog:\n\tdocumenting alias-path\n\n\tMembers:\n\t\tdoc/manual.sgml:1.2->1.2.2.1\n\n\t---------------------\n\nAnd your script does that:\n\n\texport GIT_COMMITTER_NAME=roessler\n\texport GIT_COMMITTER_EMAIL=roessler\n\texport GIT_AUTHOR_NAME=roessler\n\texport GIT_AUTHOR_EMAIL=roessler\n\texport GIT_AUTHOR_DATE='1998/06/20 03:53:44'\n\tln -sf refs/heads/'master' .git/HEAD\n\tgit-read-tree -m HEAD\n\tgit-checkout-cache -f -u -a\n\tmkdir -p doc\n\tco -p -r1.2.2.1 '/home/cip/adm/sithglan/work/mutt/cvsrepository/doc/Attic/manual.sgml,v' > 'doc/manual.sgml'\n\tgit-update-cache --add -- 'doc/manual.sgml'\n\ttree=$(git-write-tree)\n\tcat > .cmitmsg <<EOFMSG\n\tdocumenting alias-path\n\tEOFMSG\n\tcommit=$(cat .cmitmsg | git-commit-tree $tree -p HEAD)\n\techo $commit > .git/HEAD\n\nThe problem might be that this is the first commit in the branch. But I thought\nit should end up in refs/heads/mutt-0-93. The problem is that this ends\nup a empty file and next time the script is working on it, it fails\nbecause the branch is empty:\n\n\t+ export GIT_COMMITTER_NAME=roessler\n\t+ GIT_COMMITTER_NAME=roessler\n\t+ export GIT_COMMITTER_EMAIL=roessler\n\t+ GIT_COMMITTER_EMAIL=roessler\n\t+ export GIT_AUTHOR_NAME=roessler\n\t+ GIT_AUTHOR_NAME=roessler\n\t+ export GIT_AUTHOR_EMAIL=roessler\n\t+ GIT_AUTHOR_EMAIL=roessler\n\t+ export 'GIT_AUTHOR_DATE=1998/06/20 07:12:32'\n\t+ GIT_AUTHOR_DATE=1998/06/20 07:12:32\n\t+ ln -sf refs/heads/mutt-0-93 .git/HEAD\n\t+ git-read-tree -m HEAD\n\tusage: git-read-tree (<sha> | -m <sha1> [<sha2> <sha3>])\n\t+ git-checkout-cache -f -u -a\n\t+ co -p -r1.1.1.1.2.2 /home/cip/adm/sithglan/work/mutt/cvsrepository/handler.c,v\n\t/home/cip/adm/sithglan/work/mutt/cvsrepository/handler.c,v  -->  standard output\n\trevision 1.1.1.1.2.2\n\t+ git-update-cache --add -- handler.c\n\t++ git-write-tree\n\t+ tree=9e4d085838e4e62a8c4236a6713a7dd8d7b07b4e\n\t+ cat\n\t++ cat .cmitmsg\n\t++ git-commit-tree 9e4d085838e4e62a8c4236a6713a7dd8d7b07b4e -p HEAD\n\tusage: git-commit-tree <sha1> [-p <sha1>]* < changelog\n\t+ commit=\n\t+ echo\n\n\tThomas\n"},{"id":"3858","messageId":"Pine.LNX.4.58.0505240929051.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"20050524161745.GA9537@cip.informatik.uni-erlangen.de","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T16:31:49Z","receivedAt":"2005-05-24T16:31:49Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Thomas Glanzmann wrote:\n> \n> And your script does that:\n> \n> \texport GIT_COMMITTER_NAME=roessler\n> \texport GIT_COMMITTER_EMAIL=roessler\n> \texport GIT_AUTHOR_NAME=roessler\n> \texport GIT_AUTHOR_EMAIL=roessler\n> \texport GIT_AUTHOR_DATE='1998/06/20 03:53:44'\n> \tln -sf refs/heads/'master' .git/HEAD\n> \tgit-read-tree -m HEAD\n> \tgit-checkout-cache -f -u -a\n> \tmkdir -p doc\n> \tco -p -r1.2.2.1 '/home/cip/adm/sithglan/work/mutt/cvsrepository/doc/Attic/manual.sgml,v' > 'doc/manual.sgml'\n> \tgit-update-cache --add -- 'doc/manual.sgml'\n> \ttree=$(git-write-tree)\n> \tcat > .cmitmsg <<EOFMSG\n> \tdocumenting alias-path\n> \tEOFMSG\n> \tcommit=$(cat .cmitmsg | git-commit-tree $tree -p HEAD)\n> \techo $commit > .git/HEAD\n> \n> The problem might be that this is the first commit in the branch. But I thought\n> it should end up in refs/heads/mutt-0-93.\n\nYes, you're using the cvs2git from yesterday, which didn't write the new\ncommit to the right branch. This is part of the branch fixing I've done.\n\nWait another few minutes and I'll commit my fix the problem with cvsps\nbranch handling (and I need to escape '$' in <<EOFMSG handling).\n\n\t\tLinus\n"},{"id":"3859","messageId":"Pine.LNX.4.58.0505240943080.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505240929051.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T16:53:58Z","receivedAt":"2005-05-24T16:53:58Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Linus Torvalds wrote:\n> \n> Wait another few minutes and I'll commit my fix the problem with cvsps\n> branch handling (and I need to escape '$' in <<EOFMSG handling).\n\nOk, committed. It takes a few minutes for the mirroring to pick it up, but \nyou should soon see a commit that says\n\n    cvs2git: escape <<EOF messages, and work around cvsps branch handling\n    \n    This escapes '$' characters in <<-handling, and gives preference to\n    the new branch when cvsps incorrectly reports a commit as originating\n    on an old branch.\n\nand once you do, you should have something that works. \n\nOf course, I've still only tested it on syslinux, but it converts a \nsyslinux CVS repo in 64 seconds for me, and now the result really _does_ \nlook correct at least superficially. Ie I can see 1029 commits on HEAD, \nwhich is exactly what cvsps also reports.\n\nAnd I see four different branches (HEAD is called \"master\" as per the \nnormal naming):\n\n\ttorvalds@ppc970:~/src/osscvs/syslinux> ll .git/refs/heads/\n\ttotal 16K\n\t-rw-rw-r--  1 torvalds torvalds 41 May 24 09:36 branch-1_xx\n\t-rw-rw-r--  1 torvalds torvalds 41 May 24 09:37 master\n\t-rw-rw-r--  1 torvalds torvalds 41 May 24 09:36 syslinux\n\t-rw-rw-r--  1 torvalds torvalds 41 May 24 09:36 syslinux-1_6x-1\n\nand doing a \n\n\tgit-rev-tree branch-1_xx master syslinux syslinux-1_6x-1 | wc -l\n\nreports 1046 total revisions (which also matches cvsps exactly).\n\nSo things look ok, but I haven't actually checked the _contents_ of the\ntree, except to look that the pathces that \"git-whatchanged -p\" reports\nlook sane.\n\nThere's two remaining bad things:\n\n - name translation doesn't exist (so all of Peters changesets get \n   reported as author \"hpa <hpa>\")\n\n - the commit time will be the conversion time, not the original commit \n   time (but the _author_ time will be correct). I suspect that for a \n   conversion like this, we really should add support for GIT_COMMIT_DATE. \n\n   That would also make the archive conversion 100% reproducible, ie\n   everybody should get the exact same objects (and thus the exact same\n   SHA1 values) which is good.\n\nI'll add the GIT_COMMIT_DATE thing, but the name translation is for \nsomebody else.\n\n\t\tLinus\n"},{"id":"3860","messageId":"42935F96.8030205@cobite.com","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505240849050.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"David Mansfield","fromEmail":"david@cobite.com","sentAt":"2005-05-24T17:08:38Z","receivedAt":"2005-05-24T17:08:38Z","isPatch":false,"sender":{"key":"david@cobite.com","avatar":null},"body":"Linus Torvalds wrote:\n> \n> On Tue, 24 May 2005, Linus Torvalds wrote:\n> \n>>It has the logic for branches, but it doesn't work, and I'm fed up enough\n>>with CVS and RCS for the moment that I'm not going to work on it any more\n>>tonight.\n> \n> \n> I'm back, and yes, it was a really stupid thing.\n> \n> However, David, I need more help deciphering \"cvsps\" output..\n> \n> Fixing the branch handling shows that cvsps does some really strange\n> things with the newly added \"Ancestor grpah\". Here's one example:\n> \n\nYes.  While not falling asleep last night I realized that the \nquick-and-dirty approach was bogus.  I need to track what the ancestor \nis as I'm building up the data structure, not while outputting it.  So \nI'm working on a correct version which puts ancestor_branch into the \nPatchSet structure itself.\n\nIt's completely done now except for that it segfaults instantly.\n\nBTW where did you get the cvsroot for syslinux?  Could I get a copy \nsomewhere?\n\nDavid\n\n\n"},{"id":"3861","messageId":"Pine.LNX.4.58.0505241017510.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505240943080.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T17:23:48Z","receivedAt":"2005-05-24T17:23:48Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Linus Torvalds wrote:\n> \n>  - the commit time will be the conversion time, not the original commit \n>    time (but the _author_ time will be correct). I suspect that for a \n>    conversion like this, we really should add support for GIT_COMMIT_DATE. \n> \n>    That would also make the archive conversion 100% reproducible, ie\n>    everybody should get the exact same objects (and thus the exact same\n>    SHA1 values) which is good.\n> \n> I'll add the GIT_COMMIT_DATE thing, but the name translation is for \n> somebody else.\n\nDone. I've also fixed the timezone to \"+0000\", so that it doesn't matter \nwhere you do the conversion, you should always get the same results \n(again, I just pushed that out, it might not have hit the public mirrors \nyet).\n\nTo get GIT_COMMITTER_DATE (note: COMMITTER, not COMMIT, to illogically \nmatch the name/email ones) you obviously also need a new git. So to have \nit all working right, you should have the top commits in git-tools and git \nbe\n\n    cvs2git: set timezone info to UTC, the way CVS does\n\nand\n\n    git-commit-tree: allow overriding of commit date\n\nrespectively.\n\nAnd if this doesn't work for you, point me to the CVS archive that causes \nyou trouble. \n\n\t\tLinus\n"},{"id":"3862","messageId":"Pine.LNX.4.58.0505241024450.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"42935F96.8030205@cobite.com","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T17:28:44Z","receivedAt":"2005-05-24T17:28:44Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, David Mansfield wrote:\n> \n> Yes.  While not falling asleep last night I realized that the \n> quick-and-dirty approach was bogus.  I need to track what the ancestor \n> is as I'm building up the data structure, not while outputting it. \n\nYes.\n\n> It's completely done now except for that it segfaults instantly.\n\nVery good. Are you going to also make a new release at some point, so that \nwe don't have strange random patches floating around?\n\n> BTW where did you get the cvsroot for syslinux?  Could I get a copy \n> somewhere?\n\nPeter sent it in private email, I don't know how public that is (it\nprobably is perfectly public and he just didn't want to spam the mailing\nlist or run afoul of size limits, but I just don't know for sure, so..),\nbut I bet he'll happily send it to you too.\n\n\t\tLinus\n"},{"id":"3863","messageId":"42937290.8030507@zytor.com","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241024450.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"H. Peter Anvin","fromEmail":"hpa@zytor.com","sentAt":"2005-05-24T18:29:36Z","receivedAt":"2005-05-24T18:29:36Z","isPatch":false,"sender":{"key":"hpa@zytor.com","avatar":null},"body":"Linus Torvalds wrote:\n> \n> Peter sent it in private email, I don't know how public that is (it\n> probably is perfectly public and he just didn't want to spam the mailing\n> list or run afoul of size limits, but I just don't know for sure, so..),\n> but I bet he'll happily send it to you too.\n> \n\nAlready sent... I haven't looked it over to make sure there isn't \nanything that shouldn't be in there yet, so if you need to distribute it \nplease give me a warning so I can look it over first.\n\n\t-hpa\n\n"},{"id":"3864","messageId":"20050524182951.GB9537@cip.informatik.uni-erlangen.de","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505240943080.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Thomas Glanzmann","fromEmail":"sithglan@stud.uni-erlangen.de","sentAt":"2005-05-24T18:29:51Z","receivedAt":"2005-05-24T18:29:51Z","isPatch":false,"sender":{"key":"sithglan@stud.uni-erlangen.de","avatar":null},"body":"Hello,\n\n>  - name translation doesn't exist (so all of Peters changesets get \n>    reported as author \"hpa <hpa>\")\n\nI pick that up.\n\n>  - the commit time will be the conversion time, not the original commit \n>    time (but the _author_ time will be correct). I suspect that for a \n>    conversion like this, we really should add support for GIT_COMMIT_DATE. \n\nThanks. I wanted to send patches or at least ask you this for ages, but\nnever did. :-)\n\n\tThomas\n"},{"id":"3865","messageId":"20050524184612.GA23637@cip.informatik.uni-erlangen.de","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241017510.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Thomas Glanzmann","fromEmail":"sithglan@stud.uni-erlangen.de","sentAt":"2005-05-24T18:46:12Z","receivedAt":"2005-05-24T18:46:12Z","isPatch":false,"sender":{"key":"sithglan@stud.uni-erlangen.de","avatar":null},"body":"Hello,\n\n> And if this doesn't work for you, point me to the CVS archive that causes \n> you trouble.\n\nyou should try the mutt cvs repository[1].\n\nI have the following issues all seem easy to fix:\n\n\t- PatchSet 1 depends on PatchSet 2 (but cvsps gets the ordering wrong;\n\t  should be easy fixable) (I just swichted the two before\n\t  running cvs2git)\n\n\t- Some Shell escapes (I didn't looked into them yet)\n\n\t\t(faui02new) [/var/tmp/sithglan/mutt-cvs] bash ~/work/cvsps/sane\n\t\tdefaulting to local storage area\n\t\tCommitting initial tree 7e68fd9a5104b61192a7da7357549d95b3a0620c\n\t\tIgnoring path .cvsignore\n\t\t...\n\t\t/home/cip/adm/sithglan/work/cvsps/sane: line 1: ...: command not found\n\t\t/home/cip/adm/sithglan/work/cvsps/sane: command substitution: line 1: unexpected EOF while looking for matching `''\n\t\t/home/cip/adm/sithglan/work/cvsps/sane: command substitution: line 4: syntax error: unexpected end of file\n\t\t/home/cip/adm/sithglan/work/cvsps/sane: command substitution: line 1: unexpected EOF while looking for matching `''\n\t\t/home/cip/adm/sithglan/work/cvsps/sane: command substitution: line 5: syntax error: unexpected end of file\n\t\t/home/cip/adm/sithglan/work/cvsps/sane: command substitution: line 1: unexpected EOF while looking for matching `''\n\t\t/home/cip/adm/sithglan/work/cvsps/sane: command substitution: line 2: syntax error: unexpected end of file\n\t\t/home/cip/adm/sithglan/work/cvsps/sane: command substitution: line 1: unexpected EOF while looking for matching `''\n\t\t/home/cip/adm/sithglan/work/cvsps/sane: command substitution: line 3: syntax error: unexpected end of file\n\t\t/home/cip/adm/sithglan/work/cvsps/sane: command substitution: line 1: unexpected EOF while looking for matching `''\n\t\t/home/cip/adm/sithglan/work/cvsps/sane: command substitution: line 26: syntax error: unexpected end of file\n\nBut hey this looks really good: :-))))))\n\n(faui02new) [/var/tmp/sithglan/mutt-cvs] git parent ~/work/mutt/git/mutt-cvs\n(faui02new) [/var/tmp/sithglan/mutt-cvs] git parentdiff\n(faui02new) [/var/tmp/sithglan/mutt-cvs]\n\nI think I will run my 'import patch by patch script again' and check the\nchangesets against the cvs2git tree, but it looks fine for me.\n\n\tThomas\n\n[1] To make it reproducable for you:\n\nI used the attached patch against cvsps-2.0rc1 which fixes date\ncovnersion problems and of course includes the ancestor thing.\n\nrsync -r rsync://cvs.gnupg.org/mutt-cvs-rep mutt-cvs-rep\n\n\ndiff --git a/cvs_direct.c b/cvs_direct.c\n--- a/cvs_direct.c\n+++ b/cvs_direct.c\n@@ -126,7 +126,7 @@ CvsServerCtx * open_cvs_server(char * p_\n \tsend_string(ctx, \"Root %s\\n\", ctx->root);\n \n \t/* this is taken from 1.11.1p1 trace - but with Mbinary removed. we can't handle it (yet!) */\n-\tsend_string(ctx, \"Valid-responses ok error Valid-requests Checked-in New-entry Checksum Copy-file Updated Created Update-existing Merged Patched Rcs-diff Mode Mod-time Removed Remove-entry Set-static-directory Clear-static-directory Set-sticky Clear-sticky Template Set-checkin-prog Set-update-prog Notified Module-expansion Wrapper-rcsOption M E F MT\\n\", ctx->root);\n+\tsend_string(ctx, \"Valid-responses ok error Valid-requests Checked-in New-entry Checksum Copy-file Updated Created Update-existing Merged Patched Rcs-diff Mode Mod-time Removed Remove-entry Set-static-directory Clear-static-directory Set-sticky Clear-sticky Template Set-checkin-prog Set-update-prog Notified Module-expansion Wrapper-rcsOption M E F\\n\", ctx->root);\n \n \tsend_string(ctx, \"valid-requests\\n\");\n \n@@ -894,6 +894,7 @@ char * cvs_rlog_fgets(char * buff, int b\n     }\n     else if (strcmp(lbuff, \"ok\") == 0 ||strcmp(lbuff, \"error\") == 0)\n     {\n+\tdebug(DEBUG_TCP, \"cvs_direct: rlog: got command completion\");\n \treturn NULL;\n     }\n \ndiff --git a/cvsps.1 b/cvsps.1\n--- a/cvsps.1\n+++ b/cvsps.1\n@@ -3,7 +3,7 @@\n CVSps \\- create patchset information from CVS\n .SH SYNOPSIS\n .B cvsps\n-[-h] [-x] [-u] [-z <fuzz>] [-g] [-s <patchset>] [-a <author>] [-f <file>] [-d <date1> [-d <date2>]] [-l <text>] [-b <branch>] [-r <tag> [-r <tag>]] [-p <directory>] [-v] [-t] [--norc] [--summary-first] [--test-log <filename>] [--bkcvs] [--no-rlog] [--diff-opts <option string>] [--cvs-direct] [--debuglvl <bitmask>] [-Z <compression>] [--root <cvsroot>] [-q] [<repository>] \n+[\\-h] [\\-x] [\\-u] [\\-z <fuzz>] [\\-g] [\\-s <patchset>] [\\-a <author>] [\\-f <file>] [\\-d <date1> [\\-d <date2>]] [\\-l <text>] [\\-b <branch>] [\\-r <tag> [\\-r <tag>]] [\\-p <directory>] [\\-v] [\\-t] [\\-\\-norc] [\\-\\-summary-first] [\\-\\-test\\-log <filename>] [\\-\\-bkcvs] [\\-\\-no\\-rlog] [\\-\\-diff\\-opts <option string>] [\\-\\-cvs\\-direct] [\\-\\-debuglvl <bitmask>] [\\-Z <compression>] [\\-\\-root <cvsroot>] [\\-q] [<repository>] \n .SH DESCRIPTION\n CVSps is a program for generating 'patchset' information from a CVS\n repository.  A patchset in this case is defined as a set of changes made\n@@ -29,7 +29,7 @@ set the timestamp fuzz factor for identi\n .B \\-g\n generate diffs of the selected patch sets\n .TP\n-.B \\-s <patchset>[-[<patchset>]][,<patchset>...]\n+.B \\-s <patchset>[\\-[<patchset>]][,<patchset>...]\n generate a diff for a given patchsets and patchset ranges\n .TP\n .B \\-a <author>\n@@ -38,7 +38,7 @@ restrict output to patchsets created by \n .B \\-f <file>\n restrict output to patchsets involving file\n .TP\n-.B \\-d <date1> -d <date2>\n+.B \\-d <date1> \\-d <date2>\n if just one date specified, show\n revisions newer than date1.  If two dates specified,\n show revisions between two dates.\n@@ -50,7 +50,7 @@ restrict output to patchsets matching re\n restrict output to patchsets affecting history of branch.\n If you want to restrict to the main branch, use a branch of 'HEAD'.\n .TP\n-.B \\-r <tag1> -r <tag2>\n+.B \\-r <tag1> \\-r <tag2>\n if just one tag specified, show\n revisions since tag1. If two tags specified, show\n revisions between the two tags.\n@@ -64,47 +64,47 @@ show very verbose parsing messages\n .B \\-t\n show some brief memory usage statistics\n .TP\n-.B \\--norc\n+.B \\-\\-norc\n when invoking cvs, ignore the .cvsrc file\n .TP\n-.B \\--summary-first\n+.B \\-\\-summary\\-first\n when multiple patchset diffs are being generated, put the patchset\n summary for all patchsets at the beginning of the output.\n .TP\n-.B \\--test-log <captured cvs log file>\n+.B \\-\\-test\\-log <captured cvs log file>\n for testing changes, you can capture cvs log output, then test against\n this captured file instead of hammering some poor CVS server\n .TP\n-.B \\--bkcvs\n+.B \\-\\-bkcvs\n (see note below) for use in parsing the BK->CVS tree log formats only.  This enables\n some hacks which are not generally applicable.\n .TP\n-.B \\--no-rlog\n+.B \\-\\-no\\-rlog\n disable the use of rlog internally.  Note: rlog is\n required for stable PatchSet numbering.  Use with care.\n .TP\n-.B \\--diffs-opts <option string>\n+.B \\-\\-diffs\\-opts <option string>\n send a custom set of options to diff, for example to increase\n the number of context lines, or change the diff format.\n .TP\n-.B \\--cvs-direct (--no-cvs-direct)\n-enable (disable) built-in cvs client code. This enables the 'pipelining' of multiple\n+.B \\-\\-cvs\\-direct (\\-\\-no-cvs\\-direct)\n+enable (disable) built\\-in cvs client code. This enables the 'pipelining' of multiple\n requests over a single client, reducing the overhead of handshaking and\n authentication to one per PatchSet instead of one per file.\n .TP\n-.B \\--debuglvl <bitmask>\n+.B \\-\\-debuglvl <bitmask>\n enable various debug output channels.\n .TP\n .B \\-Z <compression>\n A value 1-9 which specifies amount of compression.  A value of 0 disables compression.\n .TP\n-.B \\--root <cvsroot>\n+.B \\-\\-root <cvsroot>\n Override the setting of CVSROOT (overrides working dir. and environment)\n .TP\n .B \\-q\n Be quiet about warnings.\n .TP\n-.B \\<repository>\n+.B <repository>\n Operate on the specified repository (overrides working dir.)\n .SH \"NOTE ON TAG HANDLING\"\n Tags are fundamentally 'file at a time' in cvs, but like everything else,\n@@ -159,17 +159,17 @@ directory in the path, and -p0 will be r\n diffs are generated in cvs-direct mode (see below), however, they will always\n be -p1 style patches.\n .SH \"NOTE ON BKCVS\"\n-The --bkcvs option is a special operating mode that should only be used when parsing\n+The \\-\\-bkcvs option is a special operating mode that should only be used when parsing\n the log files from the BK -> CVS exported linux kernel trees.  cvsps uses special\n semantics for recreating the BK ChangeSet metadata that has been embedded in the log\n-files for those trees.  The --bkcvs option should only be specified when the cache\n-file is being created or updated (i.e. initial run of cvsps, or when -u and -x options\n+files for those trees.  The \\-\\-bkcvs option should only be specified when the cache\n+file is being created or updated (i.e. initial run of cvsps, or when \\-u and \\-x options\n are used).\n .SH \"NOTE ON CVS-DIRECT\"\n As of version 2.0b6 cvsps has a partial implementation of the cvs client code built \n in.  This reduces the RTT and/or handshaking overhead from one per patchset member\n to one per patchset.  This dramatically increases the speed of generating diffs\n-over a slow link, and improves the consistency of operation.  Currently the --cvs-direct\n+over a slow link, and improves the consistency of operation.  Currently the \\-\\-cvs-direct\n option turns on the use of this code, but it very well may be default by the time\n 2.0 comes out.  The built-in cvs code attempts to be compatible with cvs, but may\n have problems, which should be reported.  It honors the CVS_RSH and CVS_SERVER \n@@ -179,7 +179,9 @@ CVSps parses an rc file at startup.  Thi\n The file should contain arguments, in the exact syntax as the command line, one per line.\n If an argument takes a parameter, the parameter should be on the same line as the argument.\n .SH \"NOTE ON DATE FORMATS\"\n-Dates have formats.  Fixme.\n+Dates must be in the format 'yyyy/mm/dd hh:mm:ss'; for example,\n+.IP \"\" 4\n+$ cvsps -d '2004/05/01 00:00:00' -d '2004/07/07 12:00:00'\n .SH \"SEE ALSO\"\n .BR cvs ( 1 ),\n .BR ci ( 1 ),\ndiff --git a/cvsps.c b/cvsps.c\n--- a/cvsps.c\n+++ b/cvsps.c\n@@ -1402,6 +1402,16 @@ static void print_patch_set(PatchSet * p\n \t   tm->tm_hour, tm->tm_min, tm->tm_sec);\n     printf(\"Author: %s\\n\", ps->author);\n     printf(\"Branch: %s\\n\", ps->branch);\n+    \n+    /* check if ancestor was different branch */\n+    if (!list_empty(&ps->members)) \n+    {\n+\t    PatchSetMember * psm = list_entry(ps->members.next, PatchSetMember, link);\n+\t    const char * abr = psm->pre_rev ? psm->pre_rev->branch : NULL;\n+\t    if (abr && strcmp(ps->branch, abr) != 0)\n+\t\t    printf(\"Ancestor branch: %s\\n\", abr);\n+    }\n+\n     printf(\"Tag: %s %s\\n\", ps->tag ? ps->tag : \"(none)\", tag_flag_descr[ps->tag_flags]);\n     printf(\"Log:\\n%s\\n\", ps->descr);\n     printf(\"Members: \\n\");\n@@ -1646,6 +1656,7 @@ static void do_cvs_diff(PatchSet * ps)\n     const char * dopts;\n     const char * utype;\n     char use_rep_path[PATH_MAX];\n+    char esc_use_rep_path[PATH_MAX];\n \n     fflush(stdout);\n     fflush(stderr);\n@@ -1666,6 +1677,8 @@ static void do_cvs_diff(PatchSet * ps)\n \tdtype = \"rdiff\";\n \tutype = \"co\";\n \tsprintf(use_rep_path, \"%s/\", repository_path);\n+\t/* the rep_path may contain characters that the shell will barf on */\n+\tescape_filename(esc_use_rep_path, PATH_MAX, use_rep_path);\n     }\n     else\n     {\n@@ -1673,6 +1686,7 @@ static void do_cvs_diff(PatchSet * ps)\n \tdtype = \"diff\";\n \tutype = \"update\";\n \tuse_rep_path[0] = 0;\n+\tesc_use_rep_path[0] = 0;\n     }\n \n     for (next = ps->members.next; next != &ps->members; next = next->next)\n@@ -1740,7 +1754,7 @@ static void do_cvs_diff(PatchSet * ps)\n \t    else\n \t    {\n \t\tsnprintf(cmdbuff, PATH_MAX * 2, \"cvs %s %s %s -p -r %s %s%s | diff %s %s /dev/null %s | sed -e '%s s|^\\\\([+-][+-][+-]\\\\) -|\\\\1 %s%s|g'\",\n-\t\t\t compress_arg, norc, utype, rev, use_rep_path, esc_file, dopts,\n+\t\t\t compress_arg, norc, utype, rev, esc_use_rep_path, esc_file, dopts,\n \t\t\t cr?\"\":\"-\",cr?\"-\":\"\", cr?\"2\":\"1\",\n \t\t\t use_rep_path, psm->file->filename);\n \t    }\n@@ -1760,7 +1774,7 @@ static void do_cvs_diff(PatchSet * ps)\n \n \t\tsnprintf(cmdbuff, PATH_MAX * 2, \"cvs %s %s %s %s -r %s -r %s %s%s\",\n \t\t\t compress_arg, norc, dtype, dopts, psm->pre_rev->rev, psm->post_rev->rev, \n-\t\t\t use_rep_path, esc_file);\n+\t\t\t esc_use_rep_path, esc_file);\n \t    }\n \t}\n \n@@ -2113,7 +2127,7 @@ static void resolve_global_symbols()\n \t    Tag * tag = list_entry(next, Tag, global_link);\n \t    CvsFileRevision * rev = tag->rev;\n \n-\t    if (!rev->present)\n+\t    if (!rev->present || !rev->post_psm)\n \t    {\n \t\tstruct list_head *tmp = next->prev;\n \t\tdebug(DEBUG_APPERROR, \"revision %s of file %s is tagged but not present\",\ndiff --git a/cvsps.h b/cvsps.h\n--- a/cvsps.h\n+++ b/cvsps.h\n@@ -11,6 +11,10 @@\n typedef struct _CvsServerCtx CvsServerCtx;\n #endif\n \n+#ifndef PATH_MAX\n+#define PATH_MAX 4096\n+#endif\n+\n extern struct hash_table * file_hash;\n extern const char * tag_flag_descr[];\n extern CvsServerCtx * cvs_direct_ctx;\ndiff --git a/util.c b/util.c\n--- a/util.c\n+++ b/util.c\n@@ -13,6 +13,7 @@\n #include <time.h>\n #include <errno.h>\n #include <signal.h>\n+#include <regex.h>\n #include <sys/stat.h>\n #include <sys/time.h>\n #include <sys/types.h>\n@@ -140,24 +141,51 @@ char *get_string(char const *str)\n     return *res;\n }\n \n+static int get_int_substr(const char * str, const regmatch_t * p)\n+{\n+    char buff[256];\n+    memcpy(buff, str + p->rm_so, p->rm_eo - p->rm_so);\n+    buff[p->rm_eo - p->rm_so] = 0;\n+    return atoi(buff);\n+}\n+\n void convert_date(time_t * t, const char * dte)\n {\n-    /* HACK: this routine parses two formats,\n-     * 1) 'cvslog' format YYYY/MM/DD HH:MM:SS\n-     * 2) time_t formatted as %d\n-     */\n-       \n-    if (strchr(dte, '/'))\n+    static regex_t date_re;\n+    static int init_re;\n+\n+#define MAX_MATCH 16\n+    size_t nmatch = MAX_MATCH;\n+    regmatch_t match[MAX_MATCH];\n+\n+    if (!init_re) \n+    {\n+\tif (regcomp(&date_re, \"([0-9]{4})[-/]([0-9]{2})[-/]([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})\", REG_EXTENDED)) \n+\t{\n+\t    fprintf(stderr, \"FATAL: date regex compilation error\\n\");\n+\t    exit(1);\n+\t}\n+\tinit_re = 1;\n+    }\n+    \n+    if (regexec(&date_re, dte, nmatch, match, 0) == 0)\n     {\n+\tregmatch_t * pm = match;\n \tstruct tm tm;\n+\n+\t/* first regmatch_t is match location of entire re */\n+\tpm++;\n \t\n-\tmemset(&tm, 0, sizeof(tm));\n-\tsscanf(dte, \"%d/%d/%d %d:%d:%d\", \n-\t       &tm.tm_year, &tm.tm_mon, &tm.tm_mday, \n-\t       &tm.tm_hour, &tm.tm_min, &tm.tm_sec);\n-\t\n+\ttm.tm_year = get_int_substr(dte, pm++);\n+\ttm.tm_mon  = get_int_substr(dte, pm++);\n+\ttm.tm_mday = get_int_substr(dte, pm++);\n+\ttm.tm_hour = get_int_substr(dte, pm++);\n+\ttm.tm_min  = get_int_substr(dte, pm++);\n+\ttm.tm_sec  = get_int_substr(dte, pm++);\n+\n \ttm.tm_year -= 1900;\n \ttm.tm_mon--;\n+\ttm.tm_isdst = 0;\n \t\n \t*t = mktime(&tm);\n     }\ndiff --git a/util.h b/util.h\n--- a/util.h\n+++ b/util.h\n@@ -6,6 +6,10 @@\n #ifndef UTIL_H\n #define UTIL_H\n \n+#ifndef PATH_MAX\n+#define PATH_MAX 4096\n+#endif\n+\n #define CVSPS_PREFIX \".cvsps\"\n \n char *xstrdup(char const *);\n"},{"id":"3866","messageId":"Pine.LNX.4.58.0505241146500.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"20050524182951.GB9537@cip.informatik.uni-erlangen.de","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T18:52:56Z","receivedAt":"2005-05-24T18:52:56Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Thomas Glanzmann wrote:\n>\n> Hello,\n> \n> >  - name translation doesn't exist (so all of Peters changesets get \n> >    reported as author \"hpa <hpa>\")\n> \n> I pick that up.\n\nNote that one advantage of the unconverted output is that while it's\nunreadable and not very helpful, it _is_ the raw output from CVS. Again,\nthat means that everybody will convert the same CVS archive into exactly\nthe same git tree, and that means (among other things) that you can then\nimmediately merge between the trees.\n\nPerhaps more interestingly, it should also mean that you can _continue_ to \nuse CVS, then re-convert it at a later date, and I think you should be \nable to merge with somebody who has been using git in the meantime.\n\nIn contrast, if you have fancy name translation, the converted tree will \nobviously depend on your translation rules.\n\nI dunno. Maybe the advantages of having nice names outweigh the \ndisadvantage of possibly generating incompatible trees.\n\n\t\t\tLinus\n"},{"id":"3867","messageId":"20050524191618.GA25606@cip.informatik.uni-erlangen.de","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241146500.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Thomas Glanzmann","fromEmail":"sithglan@stud.uni-erlangen.de","sentAt":"2005-05-24T19:16:18Z","receivedAt":"2005-05-24T19:16:18Z","isPatch":false,"sender":{"key":"sithglan@stud.uni-erlangen.de","avatar":null},"body":"Hello,\n\n> Note that one advantage of the unconverted output is that while it's\n> unreadable and not very helpful, it _is_ the raw output from CVS. Again,\n> that means that everybody will convert the same CVS archive into exactly\n> the same git tree, and that means (among other things) that you can then\n> immediately merge between the trees.\n\nI see your point. But it depends on the usage scenario. For me for\nexample I would like to vendortrack a few CVS repositories. And I use it\nonly to maintain a few patches (branches and the merging facilities of\ngit come handy in here), not in a distributed environment were I need\nthat much reproducability. So having the option to use them is fine for\nme and when I need reproducability than I simple don't. When I think\nabout this scenario ... it comes in my mind that it maybe would be\nhelpful to have a helper applications like git-merge-base which looks at\nthe treeids and not the commit ids to find the merge base, or is that\njust bullshit?\n\n\tThomas\n"},{"id":"3868","messageId":"7vu0kstojw.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241146500.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-05-24T19:24:35Z","receivedAt":"2005-05-24T19:24:35Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":">>>>> \"LT\" == Linus Torvalds <torvalds@osdl.org> writes:\n\nLT> Perhaps more interestingly, it should also mean that you can _continue_ to \nLT> use CVS, then re-convert it at a later date, and I think you should be \nLT> able to merge with somebody who has been using git in the meantime.\n\nLT> In contrast, if you have fancy name translation, the converted tree will \nLT> obviously depend on your translation rules.\n\nLT> I dunno. Maybe the advantages of having nice names outweigh the \nLT> disadvantage of possibly generating incompatible trees.\n\nLT> \t\t\tLinus\n\nPorcelain layers should be capable of mapping author/committer\nnames taken out of the commit object, just like they already\nconvert the human unreadable unixtime value into something human\nreadable.  I'd vote for keeping the original value taken from\nCVS for this particular \"conversion\" application.\n\nWhat _all_ Porcelain layer implementation would benefit from is\nif we had a common output format routine that is similar to the\nspirit of show_date() function.  Have format_commit_fancy()\nfunction that takes a commit object and have it do the mapping.\nThen everybody can use it for their own Porcelain.\n\nThe diff-tree header generation can use it when (and only when)\nit is operating under a new flag (--map-author-names), to\nprettyprint the author names.  I'd also suggest to have a flag\nto reduce the prettyprinting it does in the current output (like\nomitting committer information) to make its output be usable for\nreproducing the commit history exactly.  diff-tree with recent\nenhancement you did (I am talking about single commit output and\n--stdin, not my diffcore stuff) has become quite useful tool for\nthis kind of thing.\n\n\n"},{"id":"3869","messageId":"Pine.LNX.4.58.0505241212190.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"20050524184612.GA23637@cip.informatik.uni-erlangen.de","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T19:34:30Z","receivedAt":"2005-05-24T19:34:30Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Thomas Glanzmann wrote:\n> \n> I have the following issues all seem easy to fix:\n> \n> \t- PatchSet 1 depends on PatchSet 2 (but cvsps gets the ordering wrong;\n> \t  should be easy fixable) (I just swichted the two before\n> \t  running cvs2git)\n\nOk, this seems to be a cvsps bug, and I'll treat it as such. David, any \nideas? It seems to be because of how cvsps sorts things by date, which is \nobviously bogus.\n\nThe cvs2git thing wouldn't normally even _care_ (ie would happily re-order\nthe thing), but for the fact that it causes problems with branches that\nare used before they are created in this case.\n\ncvsps really should do some kind of topo-sort. Probably doesn't need a lot\n(ie it probably doesn't even need to be topological, but the \"order\"  \nshould be based on trivial dependencies first, and time second. For\nexample, once David does the per-commit branch handling, I suspect enough\nof an ordering to keep git happy falls out of that).\n\n> \t- Some Shell escapes (I didn't looked into them yet)\n\nOk, I'll check it out. I didn't figure out what characters are \nshell-expanded by \"<<EOF\" handling, and only did '$' because that showed \nup in the syslinux archives.\n\n> (faui02new) [/var/tmp/sithglan/mutt-cvs] git parent ~/work/mutt/git/mutt-cvs\n> (faui02new) [/var/tmp/sithglan/mutt-cvs] git parentdiff\n> (faui02new) [/var/tmp/sithglan/mutt-cvs]\n> \n> I think I will run my 'import patch by patch script again' and check the\n> changesets against the cvs2git tree, but it looks fine for me.\n\nIn theory, they should give the exact same results, no? At least if there \nare no binary objects. Of course, you'd have to update your import script \nto do the times the same way.\n\n\t\tLinus\n"},{"id":"3870","messageId":"429383D6.6010908@cobite.com","threadId":"565","inReplyTo":"20050524184612.GA23637@cip.informatik.uni-erlangen.de","subject":"Re: gitweb wishlist","fromName":"David Mansfield","fromEmail":"david@cobite.com","sentAt":"2005-05-24T19:43:18Z","receivedAt":"2005-05-24T19:43:18Z","isPatch":false,"sender":{"key":"david@cobite.com","avatar":null},"body":"Thomas Glanzmann wrote:\n> Hello,\n> \n> \n>>And if this doesn't work for you, point me to the CVS archive that causes \n>>you trouble.\n> \n> \n> you should try the mutt cvs repository[1].\n\nSounds good.  I'll give it a try.  I'm testing the branch ancestor \nlogic, which seems to be working better now.  The version I sent to the \nlist yesterday was pretty bogus for some cases, as well as reporting the \nancestor multiple times for any give branch.\n\n> \n> I have the following issues all seem easy to fix:\n> \n> \t- PatchSet 1 depends on PatchSet 2 (but cvsps gets the ordering wrong;\n> \t  should be easy fixable) (I just swichted the two before\n> \t  running cvs2git)\n> \n\nThere is something strange about 'cvs import' I believe which causes \nvarious bizarre things to happen to the first cvsps patchset.  I haven't \nlooked at mutt cvs yet, but this could be the cause.  If you see a lot \nof version numbers 1.1.1.1 then this is indeed the problem.\n\n> I used the attached patch against cvsps-2.0rc1 which fixes date\n> covnersion problems and of course includes the ancestor thing.\n\nI'll look at taking these patches upstream.  The 'MT' fix is already in \nmy cvs of cvsps, and the rest looks pretty good.\n\nDo you know where I can get attribution information for these changes? \nAre they all from you? (I'm not familiar with debian at all)\n\nDavid\n"},{"id":"3871","messageId":"7voeb0tnm5.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"7vu0kstojw.fsf@assigned-by-dhcp.cox.net","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-05-24T19:44:50Z","receivedAt":"2005-05-24T19:44:50Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":">>>>> \"JCH\" == Junio C Hamano <junkio@cox.net> writes:\n\nJCH> What _all_ Porcelain layer implementation would benefit from is\nJCH> if we had a common output format routine that is similar to the\nJCH> spirit of show_date() function.  Have format_commit_fancy()\nJCH> function that takes a commit object and have it do the mapping.\n\nHere is a small script called \"whodunnit.sh\", and its output can\nbe cleaned up if we had a git-format-commit command that used\nformat_commit_fancy(), that massages author/committer names (and\nprobably some other prettyprinting), instead of plain old\n\"git-cat-file commit\".\n\n#!/bin/sh\ngit-rev-list ${1:-HEAD} |\nwhile read commit\ndo\n\tgit-cat-file commit $commit |\n\tsed -ne '/^author \\([^>]*>\\).*/{s//\\1/p;q;}'\ndone | sort | uniq -c | sort -n\n\nThe lines it currently spits out looks like this:\n\n      6 ...\n      8 Linus Torvalds <torvalds@ppc970.osdl.org.(none)>\n        ...\n    155 ...\n    229 Linus Torvalds <torvalds@ppc970.osdl.org>\n\nMy suggestion for Thomas is not to volunteer changing\ncvsps-to-git to munge names at conversion time, but instead to\nvolunteer doing the format_commit_fancy() on the core-ish side.\nIt would read from $GIT_DIR/author-names which would be a plain\ntext file that is a sequence of:\n\n    \"bogus name\" TAB \"good name\" LF\n\nwhere you would put \".(none)\" version to \"bogus\" side and the\ncorrected one on the \"good\" side.\n\n"},{"id":"3872","messageId":"Pine.LNX.4.58.0505241236020.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"20050524184612.GA23637@cip.informatik.uni-erlangen.de","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T19:47:58Z","receivedAt":"2005-05-24T19:47:58Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Thomas Glanzmann wrote:\n> \n> [1] To make it reproducable for you:\n> \n> I used the attached patch against cvsps-2.0rc1 which fixes date\n> covnersion problems and of course includes the ancestor thing.\n> \n> rsync -r rsync://cvs.gnupg.org/mutt-cvs-rep mutt-cvs-rep\n\nOk, that's a lot bigger and slower than syslinux. It seems to be importing \nabout 9.5 changesets per second, and there's 3757 patchsets, so it looks \nlike about 6 minutes.\n\nOh, done.\n\nAnd yes, there's a few problems. It seems to be the fault of a frowning\n\"smiley\" - the '\\' followed by newline in this:\n\n\t[unstable] Re-add in-reply-to.  This time with a suitable default. #-\\\n\nand one back-tick.\n\nWill fix. This will take another six minutes of testing ;)\n\n\t\tLinus\n"},{"id":"3873","messageId":"4293868C.2080203@cobite.com","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505240911050.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"David Mansfield","fromEmail":"david@cobite.com","sentAt":"2005-05-24T19:54:52Z","receivedAt":"2005-05-24T19:54:52Z","isPatch":false,"sender":{"key":"david@cobite.com","avatar":null},"body":"Linus Torvalds wrote:\n> \n> On Tue, 24 May 2005, Linus Torvalds wrote:\n> \n>>Fixing the branch handling shows that cvsps does some really strange\n>>things with the newly added \"Ancestor grpah\". Here's one example:\n> \n> \n> Ahh, looking at cvsps source, I think I see what's going on. \n> \n> It's deciding the \"previous branch\" by looking at what the previous branch \n> for the first individual file in the PatchSet was, which fails because in \n> this case, PatchSet 372 was changing \"syslinux.doc\", and Patchset 374 was \n> changing \"syslinux.c\", and thus the previous version of the individual \n> _files_ were both in the HEAD branch.\n> \n> So it does look like I should just ignore the \"Ancestor branch\" \n> information if the new branch already existed.\n> \n\nI now consider all files in a commit, and all commits in a branch to \ndetermine the ancestor, and only report it in the first commit on the \nbranch.\n\nStrangely, you have to look at (potentially) all commits on a branch to \nfind the 'true' ancestor branch.\n\nThe problem is for branch-off-branch branches where the first commit on \nthe new branch modifies only files never modified on the branch-off-HEAD \nbranch.  This is because cvs only REALLY creates the branch when the \nfirst commit is made (for that file) on the branch.  Before that, it is \njust a 'potential' branch...\n\nBut I have code now which (seems to) works, but needs a bit more checking.\n\n> Of course, some semantics will never be translatable when trying to treat \n> CVS as a sane system (ie treating CVS as if it was changeset-based is \n> always going to cause strange corner cases since it really is file-based), \n> but that should most likely give the best approximation of what a \n> conversion should do.\n> \n\nYes.\n\nDavid\n\n"},{"id":"3874","messageId":"42938893.9010608@cobite.com","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505240911050.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"David Mansfield","fromEmail":"david@cobite.com","sentAt":"2005-05-24T20:03:31Z","receivedAt":"2005-05-24T20:03:31Z","isPatch":false,"sender":{"key":"david@cobite.com","avatar":null},"body":"Linus Torvalds wrote:\n> \n> On Tue, 24 May 2005, Linus Torvalds wrote:\n> \n>>Fixing the branch handling shows that cvsps does some really strange\n>>things with the newly added \"Ancestor grpah\". Here's one example:\n> \n> \n> Ahh, looking at cvsps source, I think I see what's going on. \n> \n> It's deciding the \"previous branch\" by looking at what the previous branch \n> for the first individual file in the PatchSet was, which fails because in \n> this case, PatchSet 372 was changing \"syslinux.doc\", and Patchset 374 was \n> changing \"syslinux.c\", and thus the previous version of the individual \n> _files_ were both in the HEAD branch.\n> \n> So it does look like I should just ignore the \"Ancestor branch\" \n> information if the new branch already existed.\n> \n\nI've attached what I just committed.  The previous 'show ancestor' patch \nneeds to be reversed and this applied.  It works for me on a half-dozen \nrepos including syslinux.\n\nYou no longer should need to work around multiple reporting of the \nancestor for a given branch, though it couldn't hurt.\n\nI'm going to finish getting some of Thomas's patches in and make an \nactual release so people won't have to scour the lists.\n\nDavid\n\n\n---------------------\nPatchSet 176 \nDate: 2005/05/24 19:57:37\nAuthor: david\nBranch: HEAD\nTag: (none) \nLog:\nshow branch ancestry\n\nMembers: \n\tcvsps.c:4.99->4.100 \n\tcvsps_types.h:4.9->4.10 \n\nIndex: cvsps/cvsps.c\ndiff -u cvsps/cvsps.c:4.99 cvsps/cvsps.c:4.100\n--- cvsps/cvsps.c:4.99\tWed Jan 26 14:46:41 2005\n+++ cvsps/cvsps.c\tTue May 24 15:57:37 2005\n@@ -26,7 +26,7 @@\n #include \"cap.h\"\n #include \"cvs_direct.h\"\n \n-RCSID(\"$Id: cvsps.c,v 4.99 2005/01/26 19:46:41 david Exp $\");\n+RCSID(\"$Id: cvsps.c,v 4.100 2005/05/24 19:57:37 david Exp $\");\n \n #define CVS_LOG_BOUNDARY \"----------------------------\\n\"\n #define CVS_FILE_BOUNDARY \"=============================================================================\\n\"\n@@ -75,6 +75,7 @@\n static int do_write_cache;\n static int statistics;\n static const char * test_log_file;\n+static struct hash_table * branch_heads;\n \n /* settable via options */\n static int timestamp_fuzz_factor = 300;\n@@ -101,6 +102,7 @@\n static int cvs_direct;\n static int compress;\n static char compress_arg[8];\n+static int track_branch_ancestry;\n \n static void check_norc(int, char *[]);\n static int parse_args(int, char *[]);\n@@ -112,7 +114,7 @@\n static void assign_pre_revision(PatchSetMember *, CvsFileRevision * rev);\n static void check_print_patch_set(PatchSet *);\n static void print_patch_set(PatchSet *);\n-static void set_ps_id(const void *, const VISIT, const int);\n+static void walk_all_ps(const void *, const VISIT, const int);\n static void show_ps_tree_node(const void *, const VISIT, const int);\n static int compare_patch_sets_bk(const void *, const void *);\n static int compare_patch_sets(const void *, const void *);\n@@ -131,6 +133,7 @@\n static int check_rev_funk(PatchSet *, CvsFileRevision *);\n static CvsFileRevision * rev_follow_branch(CvsFileRevision *, const char *);\n static int before_tag(CvsFileRevision * rev, const char * tag);\n+static void determine_branch_ancestor(PatchSet * ps, PatchSet * head_ps);\n \n int main(int argc, char *argv[])\n {\n@@ -164,6 +167,7 @@\n \n     file_hash = create_hash_table(1023);\n     global_symbols = create_hash_table(111);\n+    branch_heads = create_hash_table(1023);\n \n     /* this parses some of the CVS/ files, and initializes\n      * the repository_path and other variables \n@@ -197,7 +201,7 @@\n     }\n \n     ps_counter = 0;\n-    twalk(ps_tree_bytime, set_ps_id);\n+    twalk(ps_tree_bytime, walk_all_ps);\n \n     resolve_global_symbols();\n \n@@ -536,7 +540,7 @@\n     debug(DEBUG_APPERROR, \"             [--test-log <captured cvs log file>] [--bkcvs]\");\n     debug(DEBUG_APPERROR, \"             [--no-rlog] [--diff-opts <option string>] [--cvs-direct]\");\n     debug(DEBUG_APPERROR, \"             [--debuglvl <bitmask>] [-Z <compression>] [--root <cvsroot>]\");\n-    debug(DEBUG_APPERROR, \"             [<repository>] [-q]\");\n+    debug(DEBUG_APPERROR, \"             [-q] [-A] [<repository>]\");\n     debug(DEBUG_APPERROR, \"\");\n     debug(DEBUG_APPERROR, \"Where:\");\n     debug(DEBUG_APPERROR, \"  -h display this informative message\");\n@@ -569,6 +573,7 @@\n     debug(DEBUG_APPERROR, \"  -Z <compression> A value 1-9 which specifies amount of compression\");\n     debug(DEBUG_APPERROR, \"  --root <cvsroot> specify cvsroot.  overrides env. and working directory\");\n     debug(DEBUG_APPERROR, \"  -q be quiet about warnings\");\n+    debug(DEBUG_APPERROR, \"  -A track and report branch ancestry\");\n     debug(DEBUG_APPERROR, \"  <repository> apply cvsps to repository.  overrides working directory\");\n     debug(DEBUG_APPERROR, \"\\ncvsps version %s\\n\", VERSION);\n \n@@ -867,6 +872,13 @@\n \t    continue;\n \t}\n \n+\tif (strcmp(argv[i], \"-A\") == 0)\n+\t{\n+\t    track_branch_ancestry = 1;\n+\t    i++;\n+\t    continue;\n+\t}\n+\n \tif (argv[i][0] == '-')\n \t    return usage(\"invalid argument\", argv[i]);\n \t\n@@ -1398,6 +1410,8 @@\n \t   tm->tm_hour, tm->tm_min, tm->tm_sec);\n     printf(\"Author: %s\\n\", ps->author);\n     printf(\"Branch: %s\\n\", ps->branch);\n+    if (ps->ancestor_branch)\n+\tprintf(\"Ancestor branch: %s\\n\", ps->ancestor_branch);\n     printf(\"Tag: %s %s\\n\", ps->tag ? ps->tag : \"(none)\", tag_flag_descr[ps->tag_flags]);\n     printf(\"Log:\\n%s\\n\", ps->descr);\n     printf(\"Members: \\n\");\n@@ -1425,7 +1439,10 @@\n     printf(\"\\n\");\n }\n \n-static void set_ps_id(const void * nodep, const VISIT which, const int depth)\n+/* walk all the patchsets to assign monotonic psid, \n+ * and to establish  branch ancestry\n+ */\n+static void walk_all_ps(const void * nodep, const VISIT which, const int depth)\n {\n     PatchSet * ps;\n \n@@ -1442,6 +1459,18 @@\n \t{\n \t    ps_counter++;\n \t    ps->psid = ps_counter;\n+\n+\t    if (track_branch_ancestry && strcmp(ps->branch, \"HEAD\") != 0)\n+\t    {\n+\t\tPatchSet * head_ps = (PatchSet*)get_hash_object(branch_heads, ps->branch);\n+\t\tif (!head_ps) \n+\t\t{\n+\t\t    head_ps = ps;\n+\t\t    put_hash_object(branch_heads, ps->branch, head_ps);\n+\t\t}\n+\n+\t\tdetermine_branch_ancestor(ps, head_ps);\n+\t    }\n \t}\n \telse\n \t{\n@@ -1912,6 +1941,7 @@\n \tps->tag_flags = 0;\n \tps->branch_add = 0;\n \tps->funk_factor = 0;\n+\tps->ancestor_branch = NULL;\n     }\n \n     return ps;\n@@ -2235,21 +2265,25 @@\n     return 0;\n }\n \n-/*\n- * When importing vendor sources, (apparently people do this)\n- * the code is added on a 'vendor' branch, which, for some reason\n- * doesn't use the magic-branch-tag format.  Try to detect that now\n- */\n-static int is_vendor_branch(const char * rev)\n+static int count_dots(const char * p)\n {\n     int dots = 0;\n-    const char *p = rev;\n \n     while (*p)\n \tif (*p++ == '.')\n \t    dots++;\n \n-    return !(dots&1);\n+    return dots;\n+}\n+\n+/*\n+ * When importing vendor sources, (apparently people do this)\n+ * the code is added on a 'vendor' branch, which, for some reason\n+ * doesn't use the magic-branch-tag format.  Try to detect that now\n+ */\n+static int is_vendor_branch(const char * rev)\n+{\n+    return !(count_dots(rev)&1);\n }\n \n void patch_set_add_member(PatchSet * ps, PatchSetMember * psm)\n@@ -2395,5 +2429,69 @@\n \t    break;\n \t}\n \ti++;\n+    }\n+}\n+\n+static void determine_branch_ancestor(PatchSet * ps, PatchSet * head_ps)\n+{\n+    struct list_head * next;\n+    CvsFileRevision * rev;\n+\n+    /* PatchSet 1 has no ancestor */\n+    if (ps->psid == 1)\n+\treturn;\n+\n+    /* HEAD branch patchsets have no ancestry, but callers should know that */\n+    if (strcmp(ps->branch, \"HEAD\") == 0)\n+    {\n+\tdebug(DEBUG_APPMSG1, \"WARNING: no branch ancestry for HEAD\");\n+\treturn;\n+    }\n+\n+    for (next = ps->members.next; next != &ps->members; next = next->next) \n+    {\n+\tPatchSetMember * psm = list_entry(next, PatchSetMember, link);\n+\trev = psm->pre_rev;\n+\tint d1, d2;\n+\n+\t/* the reason this is at all complicated has to do with a \n+\t * branch off of a branch.  it is possible (and indeed \n+\t * likely) that some file would not have been modified \n+\t * from the initial branch point to the branch-off-branch \n+\t * point, and therefore the branch-off-branch point is \n+\t * really branch-off-HEAD for that specific member (file).  \n+\t * in that case, rev->branch will say HEAD but we want \n+\t * to know the symbolic name of the first branch\n+\t * so we continue to look member after member until we find\n+\t * the 'deepest' branching.  deepest can actually be determined\n+\t * by considering the revision currently indicated by \n+\t * ps->ancestor_branch (by symbolic lookup) and rev->rev. the \n+\t * one with more dots wins\n+\t *\n+\t * also, the first commit in which a branch-off-branch is \n+\t * mentioned may ONLY modify files never committed since\n+\t * original branch-off-HEAD was created, so we have to keep\n+\t * checking, ps after ps to be sure to get the deepest ancestor\n+\t *\n+\t * note: rev is the pre-commit revision, not the post-commit\n+\t */\n+\tif (!head_ps->ancestor_branch)\n+\t    d1 = 0;\n+\telse if (strcmp(ps->branch, rev->branch) == 0)\n+\t    continue;\n+\telse if (strcmp(head_ps->ancestor_branch, \"HEAD\") == 0)\n+\t    d1 = 1;\n+\telse {\n+\t    /* branch_rev may not exist if the file was added on this branch for example */\n+\t    const char * branch_rev = (char *)get_hash_object(rev->file->branches_sym, head_ps->ancestor_branch);\n+\t    d1 = branch_rev ? count_dots(branch_rev) : 1;\n+\t}\n+\n+\td2 = count_dots(rev->rev);\n+\t\n+\tif (d2 > d1)\n+\t    head_ps->ancestor_branch = rev->branch;\n+\n+ \t//printf(\"-----> %d ancestry %s %s %s\\n\", ps->psid, ps->branch, head_ps->ancestor_branch, rev->file->filename);\n     }\n }\nIndex: cvsps/cvsps_types.h\ndiff -u cvsps/cvsps_types.h:4.9 cvsps/cvsps_types.h:4.10\n--- cvsps/cvsps_types.h:4.9\tMon Mar 31 18:06:18 2003\n+++ cvsps/cvsps_types.h\tTue May 24 15:57:37 2005\n@@ -110,6 +110,7 @@\n     char *tag;\n     int tag_flags;\n     char *branch;\n+    char *ancestor_branch;\n     struct list_head members;\n     /*\n      * A 'branch add' patch set is a bogus patch set created automatically\n"},{"id":"3875","messageId":"Pine.LNX.4.58.0505241259250.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241236020.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T20:09:51Z","receivedAt":"2005-05-24T20:09:51Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Linus Torvalds wrote:\n> \n> Will fix. This will take another six minutes of testing ;)\n\nAlmost eight minutes. Still, the final average was 8 changesets per\nsecond, which sounds pretty damn good to me, actually.\n\nAnyway, I've checked in the fix for the quoting, and I now get the right \nnumber of revisions, ie\n\n\tgit-rev-tree $(ls .git/refs/heads/) | wc -l\n\nreturns the same \"3757\" that cvsps reports. \n\nHowever, \"git-fsck-cache --unreachable\" reports 102 unreachable blobs,\nwhich worries me. It's really blobs only, which is strange: it implies\nthat we did the \"git-update-cache\" but not a \"git-write-tree\" (or that the\ngit-write-tree failed for some reason, but that sounds even stranger,\nsince we did successfully do all the commits)\n\nThe only way I can see the unreachable blobs happening is if one of he\nChangeSet entries in cvsps mentions the _same_ pathname twice for a single\nChangeSet. David, is that possible?\n\nExactly because it's only blobs, it really does smell like a cvsps issue. \nMy scripts always use \"git-update-cache --add -- filename\", so it never \ncreates any blobs _except_ when it adds them to the index (and thus \nwrite-tree should always pick them up, unless we update the index again \nbefore the next write-tree happens).\n\n\t\t\tLinus\n"},{"id":"3876","messageId":"42938A39.6020008@cobite.com","threadId":"565","inReplyTo":"42938893.9010608@cobite.com","subject":"Re: gitweb wishlist","fromName":"David Mansfield","fromEmail":"david@cobite.com","sentAt":"2005-05-24T20:10:33Z","receivedAt":"2005-05-24T20:10:33Z","isPatch":false,"sender":{"key":"david@cobite.com","avatar":null},"body":"David Mansfield wrote:\n> Linus Torvalds wrote:\n> \n>>On Tue, 24 May 2005, Linus Torvalds wrote:\n>>\n>>\n>>>Fixing the branch handling shows that cvsps does some really strange\n>>>things with the newly added \"Ancestor grpah\". Here's one example:\n>>\n>>\n>>Ahh, looking at cvsps source, I think I see what's going on. \n>>\n>>It's deciding the \"previous branch\" by looking at what the previous branch \n>>for the first individual file in the PatchSet was, which fails because in \n>>this case, PatchSet 372 was changing \"syslinux.doc\", and Patchset 374 was \n>>changing \"syslinux.c\", and thus the previous version of the individual \n>>_files_ were both in the HEAD branch.\n>>\n>>So it does look like I should just ignore the \"Ancestor branch\" \n>>information if the new branch already existed.\n>>\n> \n> \n> I've attached what I just committed.  The previous 'show ancestor' patch \n> needs to be reversed and this applied.  It works for me on a half-dozen \n> repos including syslinux.\n> \n\nOops.  I forgot to metion I made the tracking of branch ancestry an \noption because it potentially increases the cpu time a fair margin \n(though here it seemed trivial).  You need to pass '-A' as an additional \nargument.\n\nDavid\n"},{"id":"3877","messageId":"20050524201615.GB25606@cip.informatik.uni-erlangen.de","threadId":"565","inReplyTo":"429383D6.6010908@cobite.com","subject":"Re: gitweb wishlist","fromName":"Thomas Glanzmann","fromEmail":"sithglan@stud.uni-erlangen.de","sentAt":"2005-05-24T20:16:15Z","receivedAt":"2005-05-24T20:16:15Z","isPatch":false,"sender":{"key":"sithglan@stud.uni-erlangen.de","avatar":null},"body":"Hello,\n\n> There is something strange about 'cvs import' I believe which causes \n> various bizarre things to happen to the first cvsps patchset.  I haven't \n> looked at mutt cvs yet, but this could be the cause.  If you see a lot \n> of version numbers 1.1.1.1 then this is indeed the problem.\n\nyes, that is happening. But it should be fairly easy to fix that.\nBecause the second one says INITIAL->1.1 and the first says 1.1->1.1.1.1\na lot.\n\n> I'll look at taking these patches upstream.  The 'MT' fix is already in \n> my cvs of cvsps, and the rest looks pretty good.\n\nGood. :-)\n\n> Do you know where I can get attribution information for these changes? \n> Are they all from you? (I'm not familiar with debian at all)\n\nnone of them is from me, they're all from Debian. Here are a few URLs\nhow to get the attribution:\n\nhttp://packages.qa.debian.org/c/cvsps.html\n\t-> You can get the source files from there: DSC are\n\tmetainformation, ORIG is your upstream version and DIFF are the\n\tdebian changes against your upstream version as patch. There is\n\talso a Changelog in the diff for the package. You should find in\n\tthere everything you need.\n\nhttp://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=cvsps\n\t-> The bug tracking system of debian could also be of help.\n\n\n\tThomas\n"},{"id":"3878","messageId":"42938C5B.4000906@cobite.com","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241259250.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"David Mansfield","fromEmail":"david@cobite.com","sentAt":"2005-05-24T20:19:39Z","receivedAt":"2005-05-24T20:19:39Z","isPatch":false,"sender":{"key":"david@cobite.com","avatar":null},"body":"Linus Torvalds wrote:\n> \n> On Tue, 24 May 2005, Linus Torvalds wrote:\n> \n>>Will fix. This will take another six minutes of testing ;)\n> \n> \n> Almost eight minutes. Still, the final average was 8 changesets per\n> second, which sounds pretty damn good to me, actually.\n> \n> Anyway, I've checked in the fix for the quoting, and I now get the right \n> number of revisions, ie\n> \n> \tgit-rev-tree $(ls .git/refs/heads/) | wc -l\n> \n> returns the same \"3757\" that cvsps reports. \n> \n> However, \"git-fsck-cache --unreachable\" reports 102 unreachable blobs,\n> which worries me. It's really blobs only, which is strange: it implies\n> that we did the \"git-update-cache\" but not a \"git-write-tree\" (or that the\n> git-write-tree failed for some reason, but that sounds even stranger,\n> since we did successfully do all the commits)\n> \n> The only way I can see the unreachable blobs happening is if one of he\n> ChangeSet entries in cvsps mentions the _same_ pathname twice for a single\n> ChangeSet. David, is that possible?\n>\n\nSounds possible.  Unfortunately, the 'uniqueness' of a commit actually \ndoesn't exist.  It's all smoke-and-mirrors.  In order to disallow this \n(which I think need to do) I'd need to use some commit member \ninformation, and add some heuristic: if this file is already in the \ncommit, then this MUST be a different commit.  Unfortunately, it's \npossible that the 'member' already in the commit is the wrong one and \nthis is the right one, which just sounds horribly ugly to me.\n\nI'll think on it.\n\nDavid\n"},{"id":"3879","messageId":"46a038f905052413192bbc10ff@mail.gmail.com","threadId":"565","inReplyTo":"4292A08A.5050108@cobite.com","subject":"Re: gitweb wishlist","fromName":"Martin Langhoff","fromEmail":"martin.langhoff@gmail.com","sentAt":"2005-05-24T20:19:42Z","receivedAt":"2005-05-24T20:19:42Z","isPatch":false,"sender":{"key":"martin.langhoff@gmail.com","avatar":"https://gravatar.com/avatar/1e3f311b6c4c15836501901ca58f8c0b0667246488084ba524d8bc9867e22fd9?d=mp&s=160"},"body":"On 5/24/05, David Mansfield <david@cobite.com> wrote:\n> > means..\n> >\n> \n> Ok.  I'll tell you.  It means that the committer uses bad practices in\n> tagging ;-)  It generally means that force tag (cvs tag -F <file>) was\n> used on a specific file.  Here's the scenario:\n\nProjects that branch on release (and maintain a long-lived stable\nbranch following the release) often use a floating MERGED branch to\nkeep track of what bugfixes have been merged back into HEAD. This\npractice, broken as it is, is the recommended approach AFAIK.\n\nIt would be a good thing to be able to tell cvsps to ignore certain\ntags (by name or by regex).\n\n\nmartin\n"},{"id":"3880","messageId":"20050524202846.GC25606@cip.informatik.uni-erlangen.de","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241259250.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Thomas Glanzmann","fromEmail":"sithglan@stud.uni-erlangen.de","sentAt":"2005-05-24T20:28:47Z","receivedAt":"2005-05-24T20:28:47Z","isPatch":false,"sender":{"key":"sithglan@stud.uni-erlangen.de","avatar":null},"body":"Hello,\n\n> Almost eight minutes. Still, the final average was 8 changesets per\n> second, which sounds pretty damn good to me, actually.\n\nyes, it is. ;-)\n\n> Anyway, I've checked in the fix for the quoting, and I now get the right \n> number of revisions, ie\n\n> \tgit-rev-tree $(ls .git/refs/heads/) | wc -l\n\n> returns the same \"3757\" that cvsps reports. \n\nNice! :-)\n\nbtw:\n\nFor the mutt tree there are a few 'empty commits' eg were the\nparent tree is the same as the current. This is because git ignores\n.cvsignore and they commited some .cvsignore files without any other\ndeltas. I don't know if you want to handle this. Just a note.\n\n> However, \"git-fsck-cache --unreachable\" reports 102 unreachable blobs,\n> which worries me. It's really blobs only, which is strange: it implies\n> that we did the \"git-update-cache\" but not a \"git-write-tree\" (or that the\n> git-write-tree failed for some reason, but that sounds even stranger,\n> since we did successfully do all the commits)\n\n> The only way I can see the unreachable blobs happening is if one of the\n> ChangeSet entries in cvsps mentions the _same_ pathname twice for a single\n> ChangeSet. David, is that possible?\n\nYes, it is, I had that problem before. For example tlr commtis the\nchangelog seperate with '# changlog' or so log message and cvsps thinks\nbecause of the 'time fuzz which defaults to a way to high value' that\nthree changelog commits are all one delta. And that it adds three\nentries. And what annoys me most in the wrong direction. So if you would\napply them as patches they don't apply because of the wrong ordering.\n\nReference:\n\t\tPatchSet 3005\n\t\tDate: 2002/12/07 19:19:42\n\t\tAuthor: roessler\n\t\tBranch: HEAD\n\t\tTag: (none)\n\t\tLog:\n\t\t# changelog commit\n\n\t\tMembers:\n\t\t\tChangeLog:3.7->3.8\n\t\t\tChangeLog:3.6->3.7\n\t\t\tChangeLog:3.5->3.6\n\nJust call cvsps with -z \"20\" for the mutt repository also -z 1 should\nwork because the timestamps of one 'commit' are all set to the same\nvalue.\n\n\tThomas\n"},{"id":"3881","messageId":"Pine.LNX.4.58.0505241316490.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241259250.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T20:33:41Z","receivedAt":"2005-05-24T20:33:41Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Linus Torvalds wrote:\n> \n> Exactly because it's only blobs, it really does smell like a cvsps issue. \n> My scripts always use \"git-update-cache --add -- filename\", so it never \n> creates any blobs _except_ when it adds them to the index (and thus \n> write-tree should always pick them up, unless we update the index again \n> before the next write-tree happens).\n\nLooking at the contents of these files, all but one of them are changelog \nfiles, which would be consistent with this theory - if gitps ends up \n\"smushing together\" two separate commits (and mutt seems to have the bad \nhabit of having just a simple \"# changelog commit\" as the commit message, \nso it would likely trigger the \"same commit message\" logic), you'd get \nexactly this.\n\nThe one non-changelog file looks like some kind of message translation\nthing:\n\n\t# This file was prepared by (in alphabetical order):\n\t#\n\t#   Alexey Vyskubov (alexey@pepper.spb.ru)\n\t#   Andrew W. Nosenko (awn@bcs.zp.ua)\n\t#   Michael Sobolev (mss@transas.com)\n\t#   Vsevolod Volkov (vvv@mutt.org.ua)\n\t#\n\t# To contact translators, please use mutt-ru mailing list:\n\t#   http://woe.spb.ru/mailman/listinfo/mutt-ru\n\t#\n\tmsgid \"\"\n\tmsgstr \"\"\n\t\"Project-Id-Version: mutt-1.4i\\n\"\n\t\"POT-Creation-Date: 2002-05-02 01:08+0200\\n\"\n\t\"PO-Revision-Date: 2002-05-03 22:53+0300\\n\"\n\n\t...\n\n\t#: alias.c:280\n\t#, c-format\n\tmsgid \"[%s = %s] Accept?\"\n\tmsgstr \"[%s = %s] ðÒÉÎÑÔØ?\"\n\n\t...\n\nand it looks like it is \"po/ru.po\". Indeed, that's a big clue:\n\n\t---------------------\n\tPatchSet 2869 \n\tDate: 2002/05/13 21:17:48\n\tAuthor: roessler\n\tBranch: mutt-1-4-stable\n\tTag: (none) \n\tLog:\n\tFrom: Vsevolod Volkov <vvv@mutt.org.ua>\n\t\n\tupdate\n\t\n\tMembers: \n\t        po/ru.po:1.129.2.5->1.129.2.6 \n\t        po/ru.po:1.129.2.4->1.129.2.5 \n\t\n\t---------------------\n\nand I thus rest my case. cvs2git is doing the right thing, and this is \nsomething that needs to be fixed in cvsps in case anybody cares.\n\n\t\tLinus\n"},{"id":"3882","messageId":"Pine.LNX.4.58.0505241334530.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"42938C5B.4000906@cobite.com","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T20:44:22Z","receivedAt":"2005-05-24T20:44:22Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, David Mansfield wrote:\n> \n> Sounds possible.  Unfortunately, the 'uniqueness' of a commit actually \n> doesn't exist.  It's all smoke-and-mirrors.  In order to disallow this \n> (which I think need to do) I'd need to use some commit member \n> information, and add some heuristic: if this file is already in the \n> commit, then this MUST be a different commit.  Unfortunately, it's \n> possible that the 'member' already in the commit is the wrong one and \n> this is the right one, which just sounds horribly ugly to me.\n> \n> I'll think on it.\n\nI think it's a fundamentally hard problem to fix, but it may be that the \nfix is to give hints about command line options and in particular the time \nfuzz thing to try.\n\nSo maybe just _detection_ logic in cvsps, along with a warning like\n\n\t\"time fuzz is 600 seconds, and the time difference between the two\n\t commits of this file was 431 seconds. You may want to try a lower\n\t -z argument\"\n\nor something.\n\nIt might also be possible to try to sort all the names by date of commit\nfirst, and see if they \"bunch up\" into groups of low fuzz with much bigger \nfuzz in between groups..\n\n\t\tLinus\n"},{"id":"3883","messageId":"Pine.LNX.4.58.0505241345280.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"20050524202846.GC25606@cip.informatik.uni-erlangen.de","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T20:47:25Z","receivedAt":"2005-05-24T20:47:25Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Thomas Glanzmann wrote:\n> \n> Just call cvsps with -z \"20\" for the mutt repository also -z 1 should\n> work because the timestamps of one 'commit' are all set to the same\n> value.\n\nAhh, the mutt people really use something else for development, and this \nis just an export into CVS (like the Linux bkcvs tree)? Or do they just \nhave fast machines and no networking? Or are there good versions of CVS \naround that re-use the same time across one whole commit?\n\n\t\tLinus\n"},{"id":"3884","messageId":"Pine.LNX.4.58.0505241410380.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"20050524202846.GC25606@cip.informatik.uni-erlangen.de","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T21:13:26Z","receivedAt":"2005-05-24T21:13:26Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Thomas Glanzmann wrote:\n> \n> btw:\n> \n> For the mutt tree there are a few 'empty commits' eg were the\n> parent tree is the same as the current. This is because git ignores\n> .cvsignore and they commited some .cvsignore files without any other\n> deltas. I don't know if you want to handle this. Just a note.\n\nI don't like source repositories with dot-files, and I thought it was a\ngood idea to disallow them, but on the other hand I'd like it even less if\nsome CVS-weenie goes and says \"I can't convert my project to git without\npotentially losing information\".\n\nSo in the name of furthering humanity through allowing people to migrate\naway from CVS, I'm considering making the git dot-file check be more\nspecific to \".\" \"..\" and \".git\". After all, project-specific rules might\nhave their own porcelain-related ignore-files that cause dot-files to\nnever appear..\n\nHmm.\n\n\t\tLinus\n"},{"id":"3885","messageId":"42939942.9080807@zytor.com","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241410380.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"H. Peter Anvin","fromEmail":"hpa@zytor.com","sentAt":"2005-05-24T21:14:42Z","receivedAt":"2005-05-24T21:14:42Z","isPatch":false,"sender":{"key":"hpa@zytor.com","avatar":null},"body":"Linus Torvalds wrote:\n> \n> I don't like source repositories with dot-files, and I thought it was a\n> good idea to disallow them, but on the other hand I'd like it even less if\n> some CVS-weenie goes and says \"I can't convert my project to git without\n> potentially losing information\".\n> \n> So in the name of furthering humanity through allowing people to migrate\n> away from CVS, I'm considering making the git dot-file check be more\n> specific to \".\" \"..\" and \".git\". After all, project-specific rules might\n> have their own porcelain-related ignore-files that cause dot-files to\n> never appear..\n> \n\nThere is another good reason to allow dot files: since git handles \nsparse trees well, and only needs metadata at the top level, it's pretty \nideal for keeping track of people's account profiles across accounts, \nand that's mostly dot files.\n\nI was considering using CVS for that at one point, but the way CVS \ndistributes its metadata and recurses makes that insane.  For git, it \nwould be trivial.\n\n\t-hpa\n"},{"id":"3887","messageId":"20050524213040.GD25606@cip.informatik.uni-erlangen.de","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241410380.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Thomas Glanzmann","fromEmail":"sithglan@stud.uni-erlangen.de","sentAt":"2005-05-24T21:30:40Z","receivedAt":"2005-05-24T21:30:40Z","isPatch":false,"sender":{"key":"sithglan@stud.uni-erlangen.de","avatar":null},"body":"Hello,\n\n> So in the name of furthering humanity through allowing people to migrate\n> away from CVS, I'm considering making the git dot-file check be more\n> specific to \".\" \"..\" and \".git\". After all, project-specific rules might\n> have their own porcelain-related ignore-files that cause dot-files to\n> never appear..\n\nAllowing dot files is a good thing, I think. But there is another issue\nI want to hear your comment on. My git frontend uses regular expressions\nfrom .git/ignore to filter orphan files I know about when calling 'git\nstatus' or 'git orhpan'. However, I thought to add this file to\nversioning. Because I think it belongs there. However I have to think\nthat through.\n\nSo if there would be a .git/etc or something were I can put files which\nstay under revision control and maybe add some options to the frontend\nor git core to don't diff against them per default. But this sounds just\nugly. Maybe I should just retrieve the ignore list when doing\npush/pulls. But I dislike this idea to. However I have to think a bit\nlonger over this.\n\nComments, anyone?\n\n\tThomas\n"},{"id":"3886","messageId":"20050524213102.GB19180@vrfy.org","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241410380.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-24T21:31:02Z","receivedAt":"2005-05-24T21:31:02Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Tue, May 24, 2005 at 02:13:26PM -0700, Linus Torvalds wrote:\n> \n> \n> On Tue, 24 May 2005, Thomas Glanzmann wrote:\n> > \n> > btw:\n> > \n> > For the mutt tree there are a few 'empty commits' eg were the\n> > parent tree is the same as the current. This is because git ignores\n> > .cvsignore and they commited some .cvsignore files without any other\n> > deltas. I don't know if you want to handle this. Just a note.\n> \n> I don't like source repositories with dot-files, and I thought it was a\n> good idea to disallow them, but on the other hand I'd like it even less if\n> some CVS-weenie goes and says \"I can't convert my project to git without\n> potentially losing information\".\n> \n> So in the name of furthering humanity through allowing people to migrate\n> away from CVS, I'm considering making the git dot-file check be more\n> specific to \".\" \"..\" and \".git\". After all, project-specific rules might\n> have their own porcelain-related ignore-files that cause dot-files to\n> never appear..\n\nWhat about allowing to put some file inside of .git/ under revision-control\ntoo? Wouldn't it be nice to have something like an \"ignore\" file or other\nrepository meta-data managed by git itself.\n\nKay\n"},{"id":"3888","messageId":"20050524214106.GE25606@cip.informatik.uni-erlangen.de","threadId":"565","inReplyTo":"42939942.9080807@zytor.com","subject":"Re: gitweb wishlist","fromName":"Thomas Glanzmann","fromEmail":"sithglan@stud.uni-erlangen.de","sentAt":"2005-05-24T21:41:06Z","receivedAt":"2005-05-24T21:41:06Z","isPatch":false,"sender":{"key":"sithglan@stud.uni-erlangen.de","avatar":null},"body":"Hello,\n\n> I was considering using CVS for that at one point, but the way CVS \n> distributes its metadata and recurses makes that insane.  For git, it \n> would be trivial.\n\nI have a shared environment, and handle it this way:\n\n\t- I edit all files on my machine on university or at least put\n\t  it there per scp when I am done modifing them local.\n\n\t- I have file called .env in my home which contains a list with\n\t  all files I want to 'distribute'.\n\n\t- There is a script called envup, which updates all files which\n\t  are not up2date. It uses perl because perl is everywhere I\n\t  have an account on. After that I call a perl preprocessor to\n\t  generate ssh config files (there are floating so much ssh\n\t  versions out there) and one to adopt my .screenrc (for the\n\t  machine local screen) to my needs.\n\nmy .bash_profile does a lot of testing to add paths and sets aliases\nbased on the environment of the machine and not based on host/domain\nnames. Files with lot of deltas like my .fvwm2rc or .bash_profile are\nall version controled using rcs on a per file basis of course. This\nworks very well for me on Linux, Solaris, OpenBSD, FreeBSD, NetBSD, OSF,\nAIX, MacOSX, name it ...\n\nOh and to bootstrap my environment on a 'new' machine:\n\ntar cfz env.tgz `cat .env`, move it over, unpack and re login.\n\nA while ago I also distributed binaries (bash, rar, fvwm) via envup for\nmy environment, but I adopted now to something that works everywhere,\nand if it doesn't I do that manual. So envup only transfers stuff which\nis new. (I have some accounts on low bandwidth sites). One known side\neffect. If envup doesn't find md5sum binary it just transfers all files.\n\nOh and a friend and colleague has a similliar script only that he pushes\nhis environment out.\n\n\tThomas\n\n\n#!/usr/bin/perl -w\n\nuse strict;\nuse integer;\n\nmy $command  = '';\n\nmy %local    = ();\nmy %remote   = ();\n\nmy @sums     = ();\nmy @transfer = ();\n\nif ( -f '/home/cip/adm/sithglan/bin/envup.server'\n  || -f \"$ENV{HOME}/bin/envup.server\" ) {\n\tdie \"NEVER EVER RUN THIS IN THE CIP POOL: YOU SUCK :-)\";\n\texit; # way to secure\u0017redundant\n}\n\n\n# [remote] ------------------------------------------\n@sums = `ssh 131.188.30.105 bin/envup.server`;\n\nforeach $_ (@sums) {\n\tchomp;\n\tif (/(^[a-f0-9]{32})[ ]{2}([^\\s]+)$/) {\n\t\t$remote{$2} = $1;\n\t\t# print \"$1 -> $2\\n\";\n\t} else {\n\t\tprint \"remote: can't match: <$_>\\n\";\n\t}\n}\n\n# [local] ------------------------------------------\n\n$command = 'md5sum ' . join(' ', keys(%remote));\n\n@sums = qx($command 2> /dev/null);\n\nforeach $_ (@sums) {\n\tchomp;\n\tif (/(^[a-f0-9]{32})[ ]{2}([^\\s]+)$/) {\n\t\t$local{$2} = $1;\n\t\t#print \"$1 -> $2\\n\";\n\n\t} else {\n\t\tprint \"local can't match: <$_>\\n\";\n\t}\n}\n\nforeach my $file (keys(%remote)) {\n\tif (exists($local{$file})) {\n\t\tif ($remote{$file} ne $local{$file}) {\n\t\t\tpush(@transfer, $file);\n\t\t}\n\n\t} else {\n\t\tpush(@transfer, $file);\n\t}\n}\n\nif (@transfer) {\n        $command = \"ssh 131.188.30.105 -- tar cf - \" . join(' ', @transfer) . \" | tar xf -\";\n        system($command);\n}\n\n\n\n#!/bin/bash\n\nmd5sum $(find `cat $HOME/.env` -type f)\n"},{"id":"3889","messageId":"Pine.LNX.4.58.0505241443400.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"20050524213102.GB19180@vrfy.org","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T21:43:59Z","receivedAt":"2005-05-24T21:43:59Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Kay Sievers wrote:\n> \n> What about allowing to put some file inside of .git/ under revision-control\n> too? Wouldn't it be nice to have something like an \"ignore\" file or other\n> repository meta-data managed by git itself.\n\nPut them into \".git-ignore\" if so..\n\n\t\tLinus\n"},{"id":"3890","messageId":"20050524215238.GG25606@cip.informatik.uni-erlangen.de","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241345280.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Thomas Glanzmann","fromEmail":"sithglan@stud.uni-erlangen.de","sentAt":"2005-05-24T21:52:38Z","receivedAt":"2005-05-24T21:52:38Z","isPatch":false,"sender":{"key":"sithglan@stud.uni-erlangen.de","avatar":null},"body":"Hello,\n\n> Ahh, the mutt people really use something else for development, and this \n> is just an export into CVS (like the Linux bkcvs tree)? Or do they just \n> have fast machines and no networking? Or are there good versions of CVS \n> around that re-use the same time across one whole commit?\n\nI did one sampling and though it would be representative which it isn't.\nWhat I don't understand why noone ever fixed this? cvs has its own rcs\nimplementation anyway to speed things up, hasn't it?\n\n\tThomas\n"},{"id":"3891","messageId":"Pine.LNX.4.58.0505241502160.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"20050524215238.GG25606@cip.informatik.uni-erlangen.de","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T22:11:32Z","receivedAt":"2005-05-24T22:11:32Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Thomas Glanzmann wrote:\n> \n> I did one sampling and though it would be representative which it isn't.\n> What I don't understand why noone ever fixed this? cvs has its own rcs\n> implementation anyway to speed things up, hasn't it?\n\nCVS has so many warts, that people can't even be bothered to fix things\nlike this. It's file-based, and that's that.\n\nUsing \"-z 1\" with cvsps doesn't seem to work well for me, but \"-z 5\" seems\nok, and together with the new git that allows .cvsignore, it doesn't\ngenerate any warnings, nor any unreachable blobs. It does generate 300 new\nchangesets, and how many of those are required, I dunno. Clearly 102 of\nthem were, to disambiguate those changelog things.\n\nMaybe \"-z 10\" would have generated a better thing with fewer changes yet\nstill unique changesets without dup files.\n\nThat's a bit irritating, that there's this magic tweakable that generates\ndifferent trees. Oh, well.\n\nAnyway, what worries me more is that cvsps might have re-ordered other \nchangesets than just the first two. It probably doesn't _matter_, but \nstill...\n\n\t\tLinus\n"},{"id":"3892","messageId":"4293A9C4.3000408@cobite.com","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241502160.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"David Mansfield","fromEmail":"david@cobite.com","sentAt":"2005-05-24T22:25:08Z","receivedAt":"2005-05-24T22:25:08Z","isPatch":false,"sender":{"key":"david@cobite.com","avatar":null},"body":">Linus Saith,\n> \n> Anyway, what worries me more is that cvsps might have re-ordered other \n> changesets than just the first two. It probably doesn't _matter_, but \n> still...\n> \n\nI think I have an idea to prevent this incorrect ordering of patchsets. \n  We'll see in the morning how it works out.\n\nDavid\n"},{"id":"3893","messageId":"20050525003917.40700d19.froese@gmx.de","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241212190.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Edgar Toernig","fromEmail":"froese@gmx.de","sentAt":"2005-05-24T22:39:17Z","receivedAt":"2005-05-24T22:39:17Z","isPatch":false,"sender":{"key":"froese@gmx.de","avatar":null},"body":"Linus Torvalds wrote:\n> > \t- Some Shell escapes (I didn't looked into them yet)\n> \n> Ok, I'll check it out. I didn't figure out what characters are \n> shell-expanded by \"<<EOF\" handling, and only did '$' because that showed \n> up in the syslinux archives.\n\nNothing is expanded when you quote the EOF-word:\n\ncat <<\"EOF\"\n`foo` $PATH\nbar \\\nbaz\nEOF\n\ngives:\n\n`foo` $PATH\nbar \\\nbaz\n\nCiao, ET.\n"},{"id":"3894","messageId":"Pine.LNX.4.58.0505241602330.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"20050525003917.40700d19.froese@gmx.de","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-24T23:05:56Z","receivedAt":"2005-05-24T23:05:56Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Wed, 25 May 2005, Edgar Toernig wrote:\n> \n> Nothing is expanded when you quote the EOF-word:\n\nOh, wow.\n\nIt's even documented in the bash man-page, now that I understand what to \nlook for.\n\nAnyway, that doc also tells me that I'm quoting the right characters, so \nnow it's not worth fixing any more.\n\n\t\tLinus\n"},{"id":"3895","messageId":"7vk6lotbil.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241602330.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-05-25T00:06:10Z","receivedAt":"2005-05-25T00:06:10Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":">>>>> \"LT\" == Linus Torvalds <torvalds@osdl.org> writes:\n\nLT> On Wed, 25 May 2005, Edgar Toernig wrote:\n>> \n>> Nothing is expanded when you quote the EOF-word:\n\nLT> Oh, wow.\n\nTest scripts in your t/ uses <<\\EOF all over the place.\n\n"},{"id":"3897","messageId":"Pine.LNX.4.58.0505241711590.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"7vk6lotbil.fsf@assigned-by-dhcp.cox.net","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-25T00:17:37Z","receivedAt":"2005-05-25T00:17:37Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Junio C Hamano wrote:\n> \n> Test scripts in your t/ uses <<\\EOF all over the place.\n\nYeah, yeah, rub it in. I suck at shell.\n\nThe sad part is that I don't even have an excuse like \"I use perl all the \ntime\". No, shell is my _forte_ when it comes to scripting.\n\n\t\tLinus \"crawl under a rock\" Torvalds\n"},{"id":"3899","messageId":"7vd5rgtaea.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505241711590.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-05-25T00:30:21Z","receivedAt":"2005-05-25T00:30:21Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":">>>>> \"LT\" == Linus Torvalds <torvalds@osdl.org> writes:\n\nLT> The sad part is that I don't even have an excuse like \"I use\nLT> perl all the time\". No, shell is my _forte_ when it comes to\nLT> scripting.\n\nYou are allowed to suck at scripting when you are so good at C\n;-).\n\nBy the by, are you still having problem with \"whatchanged -s\"?\nI see a few of my patches still not in your tree, and I do not\ncare too much about the last one (rename/copy similarity\nestimator update) after you made it clear that -M and -C are of\nlower priority, I would like to know if the \"diff-tree -s\" fix I\nsent you was missing the point, and if so how.  Also the test\nscripts to verify your fix to the \"checkout-cache --prefix\npointing at some directory via symlink\" along with your fix is\nsomething I feel ready to go.\n\nHoping it would be easy to look for a message by message-ID,\nhere they are.  The first one is the proposed \"diff-tree -s\"\nfix.\n\nSubject: Re: [PATCH 3/3] Diff overhaul, adding the other half...\nMessage-ID: <7vr7fxuh8b.fsf@assigned-by-dhcp.cox.net>\n\nSubject: Squelch compiler warning\nMessage-ID: <7vis18v4ea.fsf_-_@assigned-by-dhcp.cox.net>\n\nSubject: [PATCH] Allow symlinks in the leading path in checkout-cache --prefix=\nMessage-ID: <7vacmlvwfk.fsf_-_@assigned-by-dhcp.cox.net>\n\nSubject: [PATCH] Update rename/copy similarity estimator.\nMessage-ID: <7vbr70v3tf.fsf@assigned-by-dhcp.cox.net>\n\n"},{"id":"3913","messageId":"7vu0ksoxg4.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"20050524213102.GB19180@vrfy.org","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-05-25T02:23:39Z","receivedAt":"2005-05-25T02:23:39Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"I was browsing www.kernel.org/git and noticed that it shows\nonly files that exist at the tip.  How do I get history of a\nfile that does not exist anymore at the tip?\n\nFor example, diff-helper.c history is (quite correctly)\ntruncated somewhere close to where diff-tree-helper.c was\nrenamed to it.  From the commit log, humans can easily tell that\nit used to be called diff-tree-helper.c.  I could not find an\neasy way to see the history of diff-tree-helper.c file.\n\nOn probably a bit different topic (but I do not know who is\nupdating the copy on www.kernel.org, sorry).  Could somebody\nupdate http://www.kernel.org/pub/software/scm/git/docs/ to\nrename git-diff-tree-helper to git-diff-helper please?\ngit.git/Documentation/git.txt has been corrected quite some\ntime ago [*1*] and I do not know how the updates are propagated\nto the web version of the documentation; is it a manual process?\n\n[Footnotes]\n\n*1* The following command tells me it was done about 10 days ago.\n\n    git-rev-list 0 |\n    git-diff-tree -S'diff-tree-helper' --stdin -v -p Documentation/git.txt\n\n"},{"id":"3918","messageId":"Pine.LNX.4.58.0505242153150.2307@ppc970.osdl.org","threadId":"565","inReplyTo":"7vu0ksoxg4.fsf@assigned-by-dhcp.cox.net","subject":"Re: gitweb wishlist","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-05-25T04:55:17Z","receivedAt":"2005-05-25T04:55:17Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Tue, 24 May 2005, Junio C Hamano wrote:\n>\n> I was browsing www.kernel.org/git and noticed that it shows\n> only files that exist at the tip.  How do I get history of a\n> file that does not exist anymore at the tip?\n\nThe only sane interface I can think of is to expose the subdirectory \nhistory and then pick from that. Otherwise you'd have to actually type in \nthe name, which is a bit against the notion of a graphical browsing \ninterface.\n\n\t\tLinus\n"},{"id":"3919","messageId":"7voeazopse.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"Pine.LNX.4.58.0505242153150.2307@ppc970.osdl.org","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-05-25T05:09:05Z","receivedAt":"2005-05-25T05:09:05Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":">>>>> \"LT\" == Linus Torvalds <torvalds@osdl.org> writes:\n\nLT> The only sane interface I can think of is to expose the subdirectory \nLT> history and then pick from that. Otherwise you'd have to actually type in \nLT> the name, which is a bit against the notion of a graphical browsing \nLT> interface.\n\nKnowing to type \"merge-tree.c\" you need to be an old timer ;-).\n\nSince I asked that question I found out that each commit has a\nlink to the diff and the tree, so if I know when merge-tree.c\ndisappeared, I can go backwards from there.\n\nI think what is useful, from software archaeologist point of\nview, would be to give a way to the web users to use pickaxe.\nType piece of code in the textbox and have the CGI run \"rev-log\n| diff-tree -S'<that piece of the code>'\".\n\n"},{"id":"3924","messageId":"20050525094841.GA24172@vrfy.org","threadId":"565","inReplyTo":"7vu0ksoxg4.fsf@assigned-by-dhcp.cox.net","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-25T09:48:41Z","receivedAt":"2005-05-25T09:48:41Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Tue, May 24, 2005 at 07:23:39PM -0700, Junio C Hamano wrote:\n> I was browsing www.kernel.org/git and noticed that it shows\n> only files that exist at the tip.  How do I get history of a\n> file that does not exist anymore at the tip?\n> \n> For example, diff-helper.c history is (quite correctly)\n> truncated somewhere close to where diff-tree-helper.c was\n> renamed to it.  From the commit log, humans can easily tell that\n> it used to be called diff-tree-helper.c.  I could not find an\n> easy way to see the history of diff-tree-helper.c file.\n\nI will add a search function when the git binaries on kernel.org get an\nupdate. Currently it's cogito-0.10.\n\n> On probably a bit different topic (but I do not know who is\n> updating the copy on www.kernel.org, sorry).  Could somebody\n> update http://www.kernel.org/pub/software/scm/git/docs/ to\n> rename git-diff-tree-helper to git-diff-helper please?\n> git.git/Documentation/git.txt has been corrected quite some\n> time ago [*1*] and I do not know how the updates are propagated\n> to the web version of the documentation; is it a manual process?\n\nDavid Greaves can write to that directory. David?\n\nKay\n"},{"id":"3925","messageId":"42945961.8060708@dgreaves.com","threadId":"565","inReplyTo":"20050525094841.GA24172@vrfy.org","subject":"Re: gitweb wishlist","fromName":"David Greaves","fromEmail":"david@dgreaves.com","sentAt":"2005-05-25T10:54:25Z","receivedAt":"2005-05-25T10:54:25Z","isPatch":false,"sender":{"key":"david@dgreaves.com","avatar":"https://gravatar.com/avatar/ca67bad50999edcdd137c9a65da2381557d175bea99ae956afdabc5785e42b79?d=mp&s=160"},"body":"\n>>On probably a bit different topic (but I do not know who is\n>>updating the copy on www.kernel.org, sorry).  Could somebody\n>>update http://www.kernel.org/pub/software/scm/git/docs/ to\n>>rename git-diff-tree-helper to git-diff-helper please?\n>>git.git/Documentation/git.txt has been corrected quite some\n>>time ago [*1*] and I do not know how the updates are propagated\n>>to the web version of the documentation; is it a manual process?\n>>    \n>>\n>\n>David Greaves can write to that directory. David?\n>  \n>\nYep.\nIt is a manual rsync process.\n\nI last ran it on the 22nd as soon as Linus committed my latest doc patches.\n\nIt's my bad though - I didn't update index.html which should be a copy\nof git.html\n\n http://www.kernel.org/pub/software/scm/git/docs/git.html\nis correct.\n\nAnyway, done now, give it time to replicate.\n\nDavid\n\n\n"},{"id":"3928","messageId":"20050525123544.GA1420@vrfy.org","threadId":"565","inReplyTo":"7vu0ksoxg4.fsf@assigned-by-dhcp.cox.net","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-25T12:35:44Z","receivedAt":"2005-05-25T12:35:44Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Tue, May 24, 2005 at 07:23:39PM -0700, Junio C Hamano wrote:\n> I was browsing www.kernel.org/git and noticed that it shows\n> only files that exist at the tip.  How do I get history of a\n> file that does not exist anymore at the tip?\n> \n> For example, diff-helper.c history is (quite correctly)\n> truncated somewhere close to where diff-tree-helper.c was\n> renamed to it.  From the commit log, humans can easily tell that\n> it used to be called diff-tree-helper.c.  I could not find an\n> easy way to see the history of diff-tree-helper.c file.\n\nIf git-diff-tree is given the -M:\n  git-rev-list HEAD | git-diff-tree -r -M --stdin diff-helper.c\n\nand it would print:\n  99665af5c0be0fe4319b39183e84917993153576 (from 13ab4462d2aefb252d7c916bd537151856b7c967)\n  :100644 100644 51bb658be4f73c00016b4ecb82f09d30941998a4 51bb658be4f73c00016b4ecb82f09d30941998a4 R10000 diff-tree-helper.c diff-helper.c\n\ninstead of:\n  99665af5c0be0fe4319b39183e84917993153576 (from 13ab4462d2aefb252d7c916bd537151856b7c967)\n  :000000 100644 0000000000000000000000000000000000000000 51bb658be4f73c00016b4ecb82f09d30941998a4 N      diff-helper.c\n\ngitweb could follow the old filename and show the whole history. :)\n\nThanks,\nKay\n"},{"id":"3931","messageId":"20050525125143.GB1481@vrfy.org","threadId":"565","inReplyTo":"20050525123544.GA1420@vrfy.org","subject":"Re: gitweb wishlist","fromName":"Kay Sievers","fromEmail":"kay.sievers@vrfy.org","sentAt":"2005-05-25T12:51:43Z","receivedAt":"2005-05-25T12:51:43Z","isPatch":false,"sender":{"key":"kay.sievers@vrfy.org","avatar":null},"body":"On Wed, May 25, 2005 at 02:35:44PM +0200, Kay Sievers wrote:\n> On Tue, May 24, 2005 at 07:23:39PM -0700, Junio C Hamano wrote:\n> > I was browsing www.kernel.org/git and noticed that it shows\n> > only files that exist at the tip.  How do I get history of a\n> > file that does not exist anymore at the tip?\n> > \n> > For example, diff-helper.c history is (quite correctly)\n> > truncated somewhere close to where diff-tree-helper.c was\n> > renamed to it.  From the commit log, humans can easily tell that\n> > it used to be called diff-tree-helper.c.  I could not find an\n> > easy way to see the history of diff-tree-helper.c file.\n> \n> If git-diff-tree is given the -M:\n>   git-rev-list HEAD | git-diff-tree -r -M --stdin diff-helper.c\n> \n> and it would print:\n>   99665af5c0be0fe4319b39183e84917993153576 (from 13ab4462d2aefb252d7c916bd537151856b7c967)\n>   :100644 100644 51bb658be4f73c00016b4ecb82f09d30941998a4 51bb658be4f73c00016b4ecb82f09d30941998a4 R10000 diff-tree-helper.c diff-helper.c\n                                                                                                      ^^^^^\nBtw:\nCan we add a leading '0' to have 3-digit values every time? It's pretty\nstupid to get the '100' out ot that field instead of '10'. :)\n\nKay\n"},{"id":"3941","messageId":"7vvf57ku4g.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"20050525123544.GA1420@vrfy.org","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-05-25T19:01:19Z","receivedAt":"2005-05-25T19:01:19Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":">>>>> \"KS\" == Kay Sievers <kay.sievers@vrfy.org> writes:\n\nKS> gitweb could follow the old filename and show the whole history. :)\n\nYes, it would work for diff-helper.c, but not for merge-tree.c,\nwhich does not have any equivalent in the tip of the tree.\n\n"},{"id":"3942","messageId":"7vu0krku3w.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"20050525125143.GB1481@vrfy.org","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-05-25T19:01:39Z","receivedAt":"2005-05-25T19:01:39Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Stupidly, I use \"%d\" without precision to output score, and\nworse yet the score is not scaled (meaning it would change when\ndefinition of MAX_SCORE changes, exposing internal scale that\nrename/copy uses).\n\nFor the sake of parsability, I think I should make that number\nalways 3 digit and per-cent; so 86% hit would be \"C086\" and the\nbogus R10000 you pointed out would become \"R100\".\n\n\n"},{"id":"3944","messageId":"7vll63ktfc.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"42945961.8060708@dgreaves.com","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-05-25T19:16:23Z","receivedAt":"2005-05-25T19:16:23Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":">>>>> \"DG\" == David Greaves <david@dgreaves.com> writes:\n\nDG> Anyway, done now, give it time to replicate.\n\nThanks.  Would something like the following (1) easy to arrange\nand (2) make your life easier?\n\n    - make index.html symlink to git.html\n    - have cron job to build and install those pages at\n      www.kernel.org\n\n\n"},{"id":"3949","messageId":"4294DC94.80308@dgreaves.com","threadId":"565","inReplyTo":"7vll63ktfc.fsf@assigned-by-dhcp.cox.net","subject":"Re: gitweb wishlist","fromName":"David Greaves","fromEmail":"david@dgreaves.com","sentAt":"2005-05-25T20:14:12Z","receivedAt":"2005-05-25T20:14:12Z","isPatch":false,"sender":{"key":"david@dgreaves.com","avatar":"https://gravatar.com/avatar/ca67bad50999edcdd137c9a65da2381557d175bea99ae956afdabc5785e42b79?d=mp&s=160"},"body":"Junio C Hamano wrote:\n\n>>>>>>\"DG\" == David Greaves <david@dgreaves.com> writes:\n>>>>>>            \n>>>>>>\n>\n>DG> Anyway, done now, give it time to replicate.\n>\n>Thanks.  Would something like the following (1) easy to arrange\n>and (2) make your life easier?\n>\n>    - make index.html symlink to git.html\n>    - have cron job to build and install those pages at\n>      www.kernel.org\n>  \n>\nHmm - sounds complicated ;)\n\n\n\n-- \n\n"},{"id":"3966","messageId":"429539C0.8050609@cobite.com","threadId":"565","inReplyTo":"20050524045840.GI12141@cip.informatik.uni-erlangen.de","subject":"Re: gitweb wishlist","fromName":"David Mansfield","fromEmail":"david@cobite.com","sentAt":"2005-05-26T02:51:44Z","receivedAt":"2005-05-26T02:51:44Z","isPatch":false,"sender":{"key":"david@cobite.com","avatar":null},"body":"\n\nThomas Glanzmann wrote:\n> Hello,\n> \n> \n>>\tWARNING: Invalid PatchSet 775, Tag syslinux-2_12-pre7:\n>>\t    memdisk/init32.asm:1.3=after, memdisk/Makefile:1.26=before. Treated as 'before'\n>>\tWARNING: Invalid PatchSet 775, Tag syslinux-2_12-pre7:\n>>\t    memdisk/init32.asm:1.3=after, memdisk/e820test.c:1.7=before. Treated as 'before'\n>>\t...\n> \n> \n> actually I think this is the broken upstream version. It can't parse\n> dates right. Just look at the exported patches and see if them all from\n> 1970. However the debian package has a patch in which solves it:\n> \n> maybe you should try with the attached patch or with the version that\n> comes with debian sarge. I also reported this problem a while back to\n> the original author.\n> \n\nI was about to apply this and I already had in it my cvs tree!  Funny \nhow these things go.  I must have gotten it before, applied it and never \nreleased a new version.  Funny that this one hase the tm.tm_isdst = 0 \nthat is missing from the version I applied (and fixes an important bug).\n\nAnyway, I'm about to release a new version cumulative with all this, a \nfixed ancestor version, correct ordering for those pesky import commits, \nand a couple other annoying fixes.\n\nBTW: the above warnings are actually legit in this case.\n\nDavid\n"},{"id":"4531","messageId":"7voeamh6e6.fsf@assigned-by-dhcp.cox.net","threadId":"565","inReplyTo":"1115931627.8465.6.camel@dhcp-188.off.vrfy.org","subject":"Re: gitweb wishlist","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-06-04T08:29:21Z","receivedAt":"2005-06-04T08:29:21Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":">>>>> \"KS\" == Kay Sievers <kay.sievers@vrfy.org> writes:\n\nKS> On Thu, 2005-05-12 at 13:07 -0700, Junio C Hamano wrote:\n>> * [Previous page] [Next page] would be nice in addition to last\n>> 10, day, week, etc.\n\nKS> That should be easy to do with the parameters we have now for the\nKS> git-rev-list. I will first finish the new browser through the\nKS> trees/files, then the project overview page and after that try the\nKS> pager,\n\nIs this still on your list of things to do?\n\n"}]}