INSERT INTO `changes` VALUES ('Ia7f6654447e699d0b2d785efd852652b0a470d69','2012-01-24 13:37:15','2012-01-27 13:02:28','001aaa2e0000137d',6,'egit','refs/heads/master','Y','n',3,3,'Remove Gerrit Configuration Page from Clone Wizard',7,4989,NULL,NULL,'N'),('I2afea7dca9e40a2748c10a7f835b2deae301ba73','2012-01-24 18:14:16','2012-01-26 22:36:05','001aa6cc0000137e',208,'egit','refs/heads/master','Y','n',9,9,'[repoView] Add submodule add/sync/update support',23,4990,NULL,NULL,'N'),('I267121efae6d06b37cd96df23317197e22e71811','2012-01-24 19:39:19','2012-01-24 22:26:55','001a9b820000137f',208,'egit','refs/heads/master','N','M',2,2,'[historyView] Use filtered commit as input to comment viewer',9,4991,NULL,NULL,'Y'),('Icccc2d7032ba11b1ead5c993995efaca36251bf0','2012-01-24 20:07:43','2012-01-26 00:14:15','001aa18e00001380',208,'egit','refs/heads/master','N','M',5,5,'[historyView] Support linking with commit editor',19,4992,NULL,NULL,'Y'),('I08b84377b573206f33e8ed7516efbafc1733f758','2012-01-24 20:30:13','2012-01-24 21:52:05','001a9b6000001381',208,'egit','refs/heads/master','N','M',1,1,'Guard against null mapping when using active editor',6,4993,NULL,NULL,'Y'),('Ib645581e8de8e8e49e891ddb21ac053d01b62f91','2012-01-24 23:09:24','2012-01-24 23:38:50','001a9bca00001382',49,'egit','refs/heads/master','N','M',1,1,'Prevent from NPE in GitSubscriberMergeContext',4,4994,NULL,NULL,'Y'),('I5e47810376419264ecf4247b5a333af5c8945080','2012-01-25 00:49:41','2012-01-25 10:19:04','001a9e4b00001383',118,'jgit','refs/heads/master','Y','n',1,1,'Add \"--squash\" option to MergeCommand ',4,4995,NULL,NULL,'N'),('I07edf7930ca9b88f914f0db8b48e025661b7ca89','2012-01-25 16:25:17','2012-01-25 22:35:41','001aa12b00001384',208,'egit','refs/heads/master','N','M',2,2,'Don\'t set shell as invisible before disposing',11,4996,NULL,NULL,'Y'),('Ib758cfe0a574aa3e80af9d289bec1a74d9b78d25','2012-01-25 17:01:31','2012-01-26 12:42:55','001aa47a00001385',208,'jgit','refs/heads/master','N','M',2,2,'Add developers section to root POM file',11,4997,NULL,NULL,'Y'),('Ifc34ad204fbf5986b257a5c616e4a8c601e8261a','2012-01-25 18:17:01','2012-01-26 23:31:42','001aa70300001386',8,'jgit','refs/heads/master','Y','n',2,2,'Workaround for AutoCRLF handling',8,4998,NULL,NULL,'N'),('If3be09886c23b031489116d448cae2dce29e281a','2012-01-26 12:16:12','2012-01-26 15:17:32','001aa51500001387',326,'egit','refs/heads/master','Y','n',2,2,'Allow push of single Refs/Commits from Repo & History Views',7,4999,NULL,NULL,'N'),('I1b8575bed7f018e1d4ee7273c4b83c8044232822','2012-01-26 16:56:17','2012-01-26 23:02:18','001aa6e600001388',208,'egit','refs/heads/master','N','M',3,3,'[repoView] Hide \'Submodules\' node when no configuration exists',10,5000,NULL,NULL,'Y'),('Ie93d16e627bd091b111b3441c1d5ef0d0de881db','2012-01-26 18:03:13','2012-01-26 21:46:31','001aa69a00001389',208,'egit','refs/heads/master','Y','n',3,3,'Delete working directory when removing a submodule repository',9,5001,NULL,NULL,'N'),('Id56f79dd342f0483f1d2263715762e35db5470ad','2012-01-26 18:03:13','2012-01-26 22:03:13','001aa6ab0000138a',208,'egit','refs/heads/master','Y','n',3,3,'Guard against missing HEAD object id when decorating submodules',9,5002,NULL,NULL,'N'),('I3b3963d420b4e18061e5699e4c1aa6caea9294f7','2012-01-26 19:26:18','2012-01-26 19:58:00','001aa62e0000138b',208,'egit','refs/heads/master','N','A',3,3,'[repoView] Add support for adding new submodules',6,5003,NULL,NULL,'N'),('Ic23f530237c8560bb2d0a98e689ce624dfcd93b0','2012-01-26 23:24:18','2012-01-27 01:55:39','001aa7930000138c',8,'jgit','refs/heads/master','N','A',1,1,'Revert \"Really close output stream when core.autocrlf is true\"',4,5004,NULL,NULL,'N'),('I0a6d770b0c4deb11fea23b875ef5449c619c05a1','2012-01-27 08:40:20','2012-01-27 08:41:00','001aa9290000138d',4,'jgit','refs/heads/stable-1.3','N','M',1,1,'Update iplog tool\'s README',5,5005,NULL,NULL,'Y'),('I21cd2b088352a28819ebe39e66f54bf8d9a4df34','2012-01-27 09:23:53','2012-01-27 09:24:31','001aa9540000138e',4,'egit-github','refs/heads/stable-1.3','N','M',1,1,'Update .eclipse_iplog for 1.3.0',5,5006,NULL,NULL,'Y');

--
-- Table structure for table `contributor_agreement_id`
--

CREATE TABLE `contributor_agreement_id` (
  `s` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  UNIQUE KEY `s` (`s`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Dumping data for table `contributor_agreement_id`
--


--
-- Table structure for table `contributor_agreements`
--

CREATE TABLE `contributor_agreements` (
  `active` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
  `require_contact_information` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
  `auto_verify` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
  `short_name` varchar(40) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `short_description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `agreement_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `id` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `contributor_agreements_active` (`active`,`short_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Dumping data for table `contributor_agreements`
--

INSERT INTO `contributor_agreements` VALUES ('Y','N','Y','Individual Contributor','Non-committer contributor.  Select this agreement to contribute a patch.','static/termsofuse.html',1),('Y','N','N','Project Committer','JGit or EGit committer in Eclipse Foundation database.','static/committer.html',2);

--
-- Table structure for table `patch_comments`
--

CREATE TABLE `patch_comments` (
  `line_nbr` int(11) NOT NULL DEFAULT '0',
  `author_id` int(11) NOT NULL DEFAULT '0',
  `written_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `status` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `side` smallint(6) NOT NULL DEFAULT '0',
  `message` mediumtext COLLATE utf8_unicode_ci,
  `parent_uuid` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
  `change_id` int(11) NOT NULL DEFAULT '0',
  `patch_set_id` int(11) NOT NULL DEFAULT '0',
  `file_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `uuid` varchar(40) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`change_id`,`patch_set_id`,`file_name`,`uuid`),
  KEY `patch_comment_drafts` (`status`,`author_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Dumping data for table `patch_comments`
--

INSERT INTO `patch_comments` VALUES (70,1,'2010-03-10 05:19:08','P',1,'I\'m confused, isn\'t this supposed to be an empty file at this point, because otherwise we\'d still write into it when we logAllRefUpdates to false because the log file exists.\n\nCan we put a better assertion about the starting value of nrOfReflogs before we start making changes?',NULL,3,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReflogConfigTest.java','AAAAAX////Y='),(70,5,'2010-03-10 05:19:08','P',1,'yes, you are right. I wanted to express that number of entries in the reflog doesn\'t change - but this will only be true of reflog entries 0 before we come here. And the comment is completely wrong. I post a fix.','AAAAAX////Y=',3,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReflogConfigTest.java','AAAAAX///+k='),(73,1,'2010-03-10 05:19:08','P',1,'Style-nit: Although not necessary, our convention is to typically use lowercase names in the code.',NULL,3,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java','AAAAAX////c='),(73,5,'2010-03-10 05:19:08','P',1,'good to know. I\'ll post a fix for this','AAAAAX////c=',3,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java','AAAAAX///+g='),(196,1,'2010-03-10 05:19:08','P',1,'I would prefer it if the case was consistent here, since we will store exactly this string in the configuration file.\n\nSince our other properties like repositoryformatversion are all lowercase strings, I think we should to the same thing here and make this all lowercase.  Plus, I think that is what git.git does.',NULL,3,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAAAAX////g='),(196,5,'2010-03-10 05:19:08','P',1,'agreed - I\'ll fix','AAAAAX////g=',3,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAAAAX///+c='),(260,1,'2010-03-10 05:19:08','P',1,'Christian, would you prefer to submit this as-is to the repository and apply your IntPair type of fix on top of it, or would you prefer to squash your fix into this commit and just note your contribution in the commit message?','AAAAAX///9g=',7,1,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAAAAn////U='),(260,5,'2010-03-10 05:19:08','P',1,'I have the fear that when I start modifiying this change we have to restart the IP-review process on bugzilla bug (291083). Since this fixes for the change are not that easy (long vs. intpair) I suggest that we first try to get this change through without modifications. And and do my fixes in a new changes which succeeds this one.\r\nI\'ll remove also my bug-fix attachment for the bugzilla.','AAAAAn////U=',7,1,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAAAAn///8M='),(260,5,'2010-03-10 05:19:08','P',1,'Here is the problem: What is returned by newSnake are two\npositions (x, k+x). These two positions are \'folded\' here into one int. snake2x() and snake2y() are used to \'unfold\'. Stress test of the diff algorithm have shown that we reach the limits of int quite soon (when diffing strings of 100k size). Snakes should become pairs of ints. I\'ll post a fix for this',NULL,7,1,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAAAAX///9g='),(43,1,'2009-10-02 00:28:56','P',1,'No, this class is horrible, it should be translated.',NULL,11,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefContentProposal.java','AAAAAX////M='),(47,1,'2009-10-02 00:28:56','P',1,'Somehow I have this sinking feeling this winds up being a user visible message.  :-(',NULL,11,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelection.java','AAAAAX////I='),(153,1,'2009-10-02 00:28:56','P',1,'Same as Author.',NULL,11,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitMessageViewer.java','AAAAAX////A='),(143,1,'2009-10-02 00:28:56','P',1,'Same as commit above.',NULL,11,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitMessageViewer.java','AAAAAX////E='),(138,1,'2009-10-02 00:28:56','P',1,'Yea, we can say NON-NLS here, but really these might need to be localized for some locales.  They are labels appearing before field values, and thus probably should be something translated.',NULL,11,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitMessageViewer.java','AAAAAX///+0='),(174,1,'2009-10-02 00:28:56','P',1,'Same as Author.',NULL,11,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitMessageViewer.java','AAAAAX///+4='),(164,1,'2009-10-02 00:28:56','P',1,'Same as Author.',NULL,11,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitMessageViewer.java','AAAAAX///+8='),(120,1,'2010-03-10 05:19:08','P',1,'Should this go in the public diff package?',NULL,37,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAAAn////c='),(58,1,'2010-03-10 05:19:08','P',1,'I think this should be a different commit, separate from your overflow bug fix.',NULL,37,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAAAn////g='),(120,5,'2010-03-10 05:19:08','P',1,'the skeleton for this test was copied from MyersDiffTest. But since we have now two classes using it I\'ll move the common classes into the util packages','AAAAAn////c=',37,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAAAn///8Q='),(58,5,'2010-03-10 05:19:08','P',1,'ok, i\'ll propose a new change for this','AAAAAn////g=',37,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAAAn///8U='),(257,1,'2010-03-10 05:19:08','P',1,'If we only need 2 ints, why not use a long here?  Most processors are 64 bits these days, and we don\'t have to perform a heap object allocation with the 8 byte object header.',NULL,37,1,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAAAAn////k='),(459,1,'2010-03-10 05:19:08','P',1,'Unnecessary trailing whitespace.',NULL,37,1,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAAAAn////o='),(257,1,'2010-03-10 05:19:08','P',1,'Yea,  I guess profiling is a good choice here rather than just assuming, though I suspect List<IntPair> is going to cost a pretty sizeable chunk of memory over a specialized LongList.  (Tangent: why the heck doesn\'t the J2SE provide IntList, LongList?  We shouldn\'t have to write them!)\n\nA good thing is, this appears to be fairly isolated to the internals of the MyersDiff class and thus isn\'t something we need to expose in our public API to consumers.  snake2x(snake) vs. snake.getX() isn\'t a big difference either way to higher level code built on top of this.','AAAAAn///8Y=',37,1,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAAAAn///7A='),(257,5,'2010-03-10 05:19:08','P',1,'Sure, it would be faster to use long. It\'s a tradeoff between speed and maintainability. If a method returns to int\'s I find it easier to understand (and maintain) if this is explicitly expressed.\r\nMy suggestion: I shortly measure it out what would be the difference in performance and memory consumption when diffing two 1mb texts. I\'ll let you know.','AAAAAn////k=',37,1,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAAAAn///8Y='),(50,1,'2010-03-10 05:19:08','P',1,'We should also implement some normal Java features:\n\n* hashCode\n* equals\n* toString',NULL,37,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IntPair.java','AAAAAn////0='),(51,1,'2010-03-10 05:19:08','P',1,'Should these be declared private final?\n\nStyle-nit: We prefer one declaration per line.',NULL,37,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IntPair.java','AAAAAn////4='),(9,1,'2010-03-10 05:19:08','P',1,'Copyright 2008 or 2009?',NULL,37,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IntPair.java','AAAAAn////8='),(56,1,'2010-03-10 05:19:08','P',1,'Style nit: Blank line between methods, and getters, even this short, use 4 lines (header, return (x); close brace, blank trailing line).',NULL,37,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IntPair.java','AAAAAn////w='),(9,1,'2010-03-10 05:19:08','P',1,'Yes, we do read copyright statements.  :-)','AAAAAn///8o=',37,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IntPair.java','AAAAAn///7E='),(56,5,'2010-03-10 05:19:08','P',1,'agreed, will come with next changeset','AAAAAn////w=',37,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IntPair.java','AAAAAn///8c='),(51,5,'2010-03-10 05:19:08','P',1,'agreed, will come with next changeset','AAAAAn////4=',37,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IntPair.java','AAAAAn///8g='),(50,5,'2010-03-10 05:19:08','P',1,'agreed, will come with next changeset','AAAAAn////0=',37,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IntPair.java','AAAAAn///8k='),(9,5,'2010-03-10 05:19:08','P',1,'2009 of course. That was just a check whether you even read the copy-right comments :-)','AAAAAn////8=',37,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IntPair.java','AAAAAn///8o='),(47,1,'2010-03-10 05:19:08','P',1,'Is this really necessary vs. using ArrayList<IntPair>?\n\nWe created IntList because storing int in an ArrayList requires allocating an Integer wrapper object for each element.  But now that you are using IntPair which is a full blown object that advantage is gone.',NULL,37,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IntPairList.java','AAAAAn////s='),(47,1,'2010-03-10 05:19:08','P',1,'Yea, we try not to reinvent the wheel and generally assume that the J2SE libraries are \"good enough\".  But we\'ve also found that memory consumption is important.  Wasting 12 bytes to store 4 bytes is fine when you have 1000 items.  Do that for 100,000 items and suddenly it starts to hurt.','AAAAAn///8s=',37,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IntPairList.java','AAAAAn///7I='),(47,5,'2010-03-10 05:19:08','P',1,'oh, then I don\'t think we need it. I was thinking a bit how to get around to create this new class. When I inspected your previous code I saw that you created your own array list and I thought - ah, these guys don\'t trust the performances of jdk collections and want to have these low-level data-structures in their hands.\r\nBut since I know your motivation I agree that we should got vor an ArrayList. \r\nI\'ll post a new patchset','AAAAAn////s=',37,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IntPairList.java','AAAAAn///8s='),(265,1,'2010-03-10 05:19:08','P',1,'Style nit: Spaces around operators:\n\n  return (int) (snake >>> 32);',NULL,37,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAAAAn///6c='),(261,1,'2010-03-10 05:19:08','P',1,'Style nit: We avoid parens in return so this line should read:\n\n  return ret | (k + x);\n\nBut I\'d even more prefer that we state what \"y\" is:\n\n  long y = k + x;\n  return ret | y;',NULL,37,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAAAAn///6g='),(260,1,'2010-03-10 05:19:08','P',1,'Style nit: Spaces around operators, so this line should read:\n\n  long ret = ((long)x) << 32;',NULL,37,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAAAAn///6k='),(269,1,'2010-03-10 05:19:08','P',1,'Isn\'t this going to have the same result as\n\n  return (int) snake;\n\nbut without needing to first push a long constant onto the stack and issuing a boolean and instruction?',NULL,37,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAAAAn///6Q='),(206,5,'2010-03-10 05:19:08','P',1,'I decided to go for long when I was trying to add good hashcode() to a LongPair. Thats expensive if x,y are not completely unrelated but are not so different. Standard hashcode which just XOR x and y are pretty bad when x is similar to y (hashcodes have only few binary \'1\' and therefore we have a lot of collisions). And while I was trying hashcodes like x^somePrime+y I knew that this will loose the performance battle. So I switched to squeezing into longs and get around the problem of having to write good hashcodes.',NULL,37,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAAAAn///6Y='),(115,1,'2010-03-10 05:19:08','P',1,'Oops.  set(size(), value) also doesn\'t match the Javadoc which says exclusive to size.  *sigh*','AAAAAn///6o=',37,2,'org.eclipse.jgit/src/org/eclipse/jgit/util/LongList.java','AAAAAn///6M='),(115,5,'2010-03-10 05:19:08','P',1,'just for info: be aware that this feature that list.set(list.size(), value) is allowed and is equivalent to list.add(value) makes this list incompatible with standard List implementations. When replacing LongList by ArrayList<Long> Myersdiff will not work anymore. Costed me some minutes testing :-)',NULL,37,2,'org.eclipse.jgit/src/org/eclipse/jgit/util/LongList.java','AAAAAn///6o='),(47,1,'2010-03-10 05:19:08','P',1,'s/ integer array / long array /',NULL,37,2,'org.eclipse.jgit/src/org/eclipse/jgit/util/LongList.java','AAAAAn///6s='),(60,1,'2010-03-10 05:19:08','P',1,'Hmm, good point, we do repeat UTF-8 encoding in a lot of places.  We already have a constant that says UTF-8, but I wanted to document it here explicitly that we were using UTF-8 for the output of this servlet.  Its unlikely to ever change.','AAAAAn///3w=',41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GetRefServlet.java','AAAAAn///28='),(57,3,'2010-03-10 05:19:08','P',1,'Do Servlets have to be public in order to be instantiated from a web.xml?',NULL,41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GetRefServlet.java','AAAAAn///30='),(57,1,'2010-03-10 05:19:08','P',1,'Yes, servlets have to be public to be loaded from web.xml.\n\nThese servlets are not meant to load from web.xml, but instead are loaded by the RepositoryRouter filter.  Applications would map RepositoryRouter into their namespace by some means, one of which can be by adding the filter in their web.xml.  Another possibility is to directly create the RepositoryRouter filter in their own Filter, delegating where necessary.  This is the approach any Guice based web application (like Gerrit Code Review) would prefer to use.','AAAAAn///30=',41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GetRefServlet.java','AAAAAn///3A='),(60,3,'2010-03-10 05:19:08','P',1,'I\'m pretty sure this constant turns up a few times - can we pull it out to a shared location?',NULL,41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GetRefServlet.java','AAAAAn///3w='),(63,1,'2010-03-10 05:19:08','P',1,'Yes, I missed that obvious refactoring on the doGet/doHead.\n\nActually, looking at the servlet spec, doHead by default calls doGet with a null output stream.  Since are already computing the response content and discarding it, its cleaner to just use the default doHead implementation.','AAAAAn///3s=',41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/InfoPacksServlet.java','AAAAAn///24='),(63,3,'2010-03-10 05:19:08','P',1,'This seems to be a recurring pattern. Should we pull up into an abstract parent and then let subclasses merely handle serve(req,res,true/false)?',NULL,41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/InfoPacksServlet.java','AAAAAn///3s='),(69,1,'2010-03-10 05:19:08','P',1,'The red blob marks a whitespace error, in this case trailing whitespace since it is on the end of a line.  (Same display as git diff gives you when coloring is turned on.)','AAAAAn///3o=',41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///20='),(183,1,'2010-03-10 05:19:08','P',1,'Good point, I\'ll add raw.length + 32 to the constructor.  Sadly we wind up with a copy anyway at the end because we cast back to a byte[] and will need to compact, but at least we save a handful of doubling expansions during compression.','AAAAAn///3I=',41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///2k='),(122,1,'2010-03-10 05:19:08','P',1,'See the no-cache case above.\n\nOur internal docs actually suggest:\n\n  Cache-Control: public, max-age=31536000\n\ninstead of the reverse above, so we might want to change this.  But IIRC public is needed to let proper HTTP 1.1 proxies know its OK to cache this content for all users of the proxy, not just the original requester.\n\nIf a proxy isn\'t able to honor this, its a busted proxy and is going to be doomed to fetching content it could have served from cache.  That\'s less of an issue than above with the no-cache case where a busted proxy might serve a cached result when it wasn\'t supposed to.','AAAAAn///3M=',41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///2o='),(107,1,'2010-03-10 05:19:08','P',1,'I just went back and reread our internal documentation, we now recommend that the header be:\n\n  Cache-Control: no-cache, no-store, max-age=0, must-revalidate\n\nwhich is fairly aggressive in not caching content.  I\'m fairly inclined to trust our internal documentation here, we are quite good at keeping this information current and valid across our entire product line.  And we have a rather large user base on the web.\n\nI\'m not an HTTP 1.1 expert, but it seems to me that sending multiple Cache-Control lines isn\'t what the standard recommends and may inadvertently break a user agent or proxy that recognizes a proper Cache-Control line.','AAAAAn///3Q=',41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///2s='),(105,1,'2010-03-10 05:19:08','P',1,'These were copied from Gerrit Code Review, which in turn has copied them from internal Google documentation describing how to properly mark HTTP entities as not cacheable by browsers or proxies.\n\nThe date doesn\'t matter, just that it is behind the Date header sent by the HTTP server.','AAAAAn///3U=',41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///2w='),(139,3,'2010-03-10 05:19:08','P',1,'Red blob?',NULL,41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///3c='),(100,3,'2010-03-10 05:19:08','P',1,'Red blob?',NULL,41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///3g='),(183,3,'2010-03-10 05:19:08','P',1,'Worth initializing to raw.length+32, to save in-line expansion when writing out the byte array?',NULL,41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///3I='),(87,3,'2010-03-10 05:19:08','P',1,'Red blob?',NULL,41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///3k='),(122,3,'2010-03-10 05:19:08','P',1,'Seen proxies before that didn\'t parse multiple entries on a Cache-Control line. Do we need both, or can we just use max-age?',NULL,41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///3M='),(69,3,'2010-03-10 05:19:08','P',1,'What does the red blob in Gerrit signify after the * on this line? Trailing whitespace?',NULL,41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///3o='),(107,3,'2010-03-10 05:19:08','P',1,'Seen proxies before that didn\'t parse multiple entries on a Cache-Control line. Do we need both, or can we just use no-cache ?',NULL,41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///3Q='),(105,3,'2010-03-10 05:19:08','P',1,'The epoch is usually 1970, rather than 1980 - any particular reason for the change? Functionally equivalent, of course.',NULL,41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///3U='),(116,3,'2010-03-10 05:19:08','P',1,'Red Blob?',NULL,41,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAAn///3Y='),(83,3,'2010-03-10 05:19:08','P',1,'Might be more efficient to walk the chars in line and do the replacement on the fly, like:\nint l = line.length();\nfor(i=0;i<l;i++) {\n  char c = line.charAt(i);\n  if( c == \' \' ) out.append( \'\\t\' ) else out.append (c );\n}\nWould be worth testing to see if this is faster/slower than the above; it may well be slower.',NULL,41,4,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/InfoRefsServlet.java','AAAAA3///+U='),(83,1,'2010-03-10 05:19:08','P',1,'Possibly, but not sure its worth the code change.  This whole part of the code just sucks due to the several copies we are making of the data as we try to generate and convert it for output.','AAAAA3///+U=',41,4,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/InfoRefsServlet.java','AAAAA3///8w='),(140,3,'2010-03-10 05:19:08','P',1,'There\'s an implicit ordering here. We might have overlaps in servlets (e.g. one serving info/ and one serving info/refs). Can we ensure that the sorting does the longest/most specific URL first somehow?',NULL,41,4,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryRouter.java','AAAAA3///+Q='),(140,1,'2010-03-10 05:19:08','P',1,'The ordering is the ordering above in init, which must be carefully updated to prevent problems.  Since its maintained by hand its easy enough to ensure the ordering is correct.  Doing longest match is a pain just because we\'d have to have knowledge of how the servlet decided to take a request.  In my opinion its not worth the effort to ensure longest match here.\n\nI\'m putting a warning comment in the binding code above.  If it ever becomes something we simply can\'t manage by code reviews someone can revisit this to do longest match, or something better.','AAAAA3///+Q=',41,4,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryRouter.java','AAAAA3///8o='),(122,3,'2010-03-10 05:19:08','P',1,'See above; any reason we can\'t just do max-age= here?',NULL,41,4,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAA3///+E='),(107,3,'2010-03-10 05:19:08','P',1,'Some proxies may not grok the comma-separated headers; any reason we can\'t just do Cache-Control: no-cache here?',NULL,41,4,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAA3///+I='),(105,3,'2010-03-10 05:19:08','P',1,'May have lost this comment from before - isn\'t the epoch 1970?',NULL,41,4,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAA3///+M='),(105,1,'2010-03-10 05:19:08','P',1,'For this and the next 2 comments about Cache-Control see my remarks on patch set 3 of this change (expand the History Table at the top of the patch view screen).','AAAAA3///+M=',41,4,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAA3///8g='),(105,3,'2010-03-10 05:19:08','P',1,'I don\'t see any of your comments on http://egit.eclipse.org/r/#patch,unified,41,3,org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java if that\'s what you mean. Can you point me to where you\'re talking about ? All of the 9 comments shown against that file are mine, as far as I can tell.','AAAAA3///8g=',41,4,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryServlet.java','AAAAA3///8U='),(88,3,'2010-03-10 05:19:08','P',1,'Bit of negation going on here; why not:\n\nreturn p == null ? null : getRealPath(p)',NULL,41,4,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/WrappedRequest.java','AAAAA3///+A='),(88,1,'2010-03-10 05:19:08','P',1,'Our coding convention is what we have written:\n\n  a != null ? a : defaultValueWhenAIsNull\n\nThus that is the way we code it.','AAAAA3///+A=',41,4,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/WrappedRequest.java','AAAAA3///8c='),(51,9,'2010-03-10 05:19:08','P',1,'This class seems to do some kind of path rewriting?\nWould it make more sense to name it something like PathRewritingRequest?\nIt achieves path rewriting by wrapping the original request but naming it WrappedRequest tells more about its implementation details than about its intention.',NULL,41,5,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/WrappedRequest.java','AAAABH///6k='),(135,8,'2010-03-10 05:19:08','P',1,'We should probably handle large sizes too or reject such requests. Just truncating could lead to nasty data corruption.\n\nSee also http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4187336',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/FileSender.java','AAAAD3///8I='),(142,8,'2010-03-10 05:19:08','P',1,'I dont\' think this will work for very large end-pos.',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/FileSender.java','AAAAD3///8M='),(162,8,'2010-03-10 05:19:08','P',1,'We don\'t need this much space, drop this and other similar extra  empty comments',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/FileSender.java','AAAAD3///8Q='),(63,8,'2010-03-10 05:19:08','P',1,'It would be nice with some javadocs even though this is not a public class',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/glue/UrlPipeline.java','AAAAD3///68='),(69,8,'2010-03-10 05:19:08','P',1,'Why this extra encoding constant',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/InfoRefsServlet.java','AAAAD3///7c='),(73,4,'2010-03-10 05:19:08','P',1,'Worth putting a //$NON-NLS-1$ here, several more occurrences in this patch',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ObjectFileServlet.java','AAAAD3///54='),(129,1,'2010-03-10 05:19:08','P',1,'I think discussion on the C Git list has changed git-http-backend to use git-daemon-export-ok check here, just like git-daemon performs.  We should do the same thing by default.',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///+I='),(152,1,'2010-03-10 05:19:08','P',1,'Thanks, that\'s a good point about // being absolute already.  I\'m going to continue to reject //, not only because its ugly, like we reject /./.  So I\'ll update the comment.','AAAAD3///7w=',41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///58='),(124,1,'2010-03-10 05:19:08','P',1,'Reformat what here?  This @return line matches our style guidelines.','AAAAD3///74=',41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///6A='),(108,1,'2010-03-10 05:19:08','P',1,'You can\'t use\n\n  finally {\n    db.close();\n  }\n\nhere because that would decrement the close count no matter what, and then return to the caller a handle which would later be decremented a second time when the request completes.  Bad.\n\nNo, here we only want to decrement the close when we aren\'t going to complete normally, but have already incremented the open counter.','AAAAD3///8A=',41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///6E='),(141,8,'2010-03-10 05:19:08','P',1,'Redundant. Absolute paths will not be so common that we\'ll have to shortcut testing for unix style absolute paths',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///70='),(124,8,'2010-03-10 05:19:08','P',1,'reformat',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///74='),(139,8,'2010-03-10 05:19:08','P',1,'spelling',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///78='),(152,8,'2010-03-10 05:19:08','P',1,'But such paths are absolute and thus rejected above. // is only a UNC marker at the beginning of a path.\nWe could possibly want to disallow double slashes anway since that\'s just sloppy path encodings. Change the comment to reflect what we are really doing here.',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///7w='),(108,8,'2010-03-10 05:19:08','P',1,'finally {\n db.close()\n}\ninstead',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///8A='),(83,8,'2010-03-10 05:19:08','P',1,'Add a constructor to support the cause parameter instead',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///8E='),(62,1,'2010-03-10 05:19:08','P',1,'Respin will rename this to AsIsFileService.  Its more thing like.','AAAAD3///7g=',41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/GetAnyFile.java','AAAAD3///5w='),(62,8,'2010-03-10 05:19:08','P',1,'This name look lika a name of a method and not a thing.',NULL,41,8,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/GetAnyFile.java','AAAAD3///7g='),(1,1,'2010-03-10 15:26:29','P',1,'Right now none of the projects have a .project file.  My intent is to merge smart-http as soon as folks will let me.  If someone follows with a patch to reintroduce the .project files as has been discussed on egit-dev, then they would need to add it here as well as in the other project directories.  So really I\'m just following the current code convention and not trying to start a new one.','AAAAD3///2Y=',41,9,'org.eclipse.jgit.http.server/.gitignore','AAAAD3///1I='),(1,3,'2010-03-10 15:26:29','P',1,'We want to check in the Eclipse settings to make it easier/possible for people to develop this',NULL,41,9,'org.eclipse.jgit.http.server/.gitignore','AAAAD3///2Y='),(1,3,'2010-03-10 15:26:29','P',1,'Fair enough.','AAAAD3///1I=',41,9,'org.eclipse.jgit.http.server/.gitignore','AAAAD3///z8='),(217,1,'2010-03-10 05:19:08','P',1,'Yea, it has.  I actually copied this bit out of our Config class\'s getBoolean method.\n\nI guess I should pull this into our StringUtil class.  I\'ll do it as a follow-up commit to this series, it looks like its probably not worth rebasing and re-reviewing everything just to correct this copy-and-paste braindamage I suffered from yesterday.','AAAAD3///2U=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitServlet.java','AAAAD3///1E='),(217,3,'2010-03-10 05:19:08','P',1,'Hasn\'t this bit of code been done elsewhere as well? Worth moving into some utility class to reuse, in case you ever want to e.g. add y or n to the list?',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitServlet.java','AAAAD3///2U='),(217,3,'2010-03-10 05:19:08','P',1,'Agreed.','AAAAD3///1E=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitServlet.java','AAAAD3///z4='),(259,1,'2010-03-10 05:19:08','P',1,'Yes, we\'re recursively calling ourselves as we walk through the array of filters.\n\nThere really isn\'t a nice way to use some sort of idiom like:\n\n  while (filter()) {\n  }\n\nbecause each filter in the chain gets to decide on its own whether or not we are allowed to call the next filter, or even call the servlet.  If the filter doesn\'t call our this.doFilter we can\'t continue down the chain.  If it does call us again, we have to keep going.\n\nThe only other alternative pattern would be to construct a new FilterChain instance on each filter invocation, e.g.:\n\n  private class DoFilter implements FilterChain {\n    private final int next;\n\n    DoFilter(int idx) {\n      next = idx;\n    }\n\n    public void doFilter(ServletRequest req, ServletResponse rsp) {\n      if (next < filters.length)\n        filters[next].doFilter(req, rsp, new DoFilter(next + 1));\n      else\n        servlet.service(req,rsp);\n    }\n  }\n\nBut this has the penalty of causing an object allocation per filter invocation and still has the same structure.\n\nI actually looked around a bit before implementing this code.  Both Jetty and Guice Servlet implement this same style of coding for filter dispatch, to reduce the number of temporary objects they have to create during request dispatching.','AAAAD3///1s=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/glue/UrlPipeline.java','AAAAD3///0c='),(259,3,'2010-03-10 05:19:08','P',1,'The act of calling doFilter seems to call the next one in the series. Does that mean we get called back before ultimately deciding on whether to do the next one or not? Wouldn\'t it be better to have a filter method which returned a true/false to say whether it\'s worth calling the next one or not, and explicitly having a while(filter()) call somewhere to process them all, rather than a mutating state?',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/glue/UrlPipeline.java','AAAAD3///1s='),(259,3,'2010-03-10 05:19:08','P',1,'OK, what tests do we have so that we know it works as expected?','AAAAD3///0c=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/glue/UrlPipeline.java','AAAAD3///zU='),(78,1,'2010-03-10 05:19:08','P',1,'Line wrapping.  The nocache string when inlined causes the line to wrap, which looks worse to me than using a local variable to hold the constant.  Either way the Eclipse source code formatter wants two use two lines for this rsp.setHeader call.  Any decent compiler will produce the same bytecode either way.','AAAAD3///2Q=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/NoCacheFilter.java','AAAAD3///1A='),(78,3,'2010-03-10 05:19:08','P',1,'Why in-line the two strings above and not this one?',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/NoCacheFilter.java','AAAAD3///2Q='),(78,3,'2010-03-10 05:19:08','P',1,'I really don\'t like doing things just because otherwise they flow onto different lines. Is that really so much of a problem?','AAAAD3///1A=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/NoCacheFilter.java','AAAAD3///z0='),(146,1,'2010-03-10 05:19:08','P',1,'Actually, no.  The line is relying on the order of operations rules to actually truncate the milliseconds off the timestamp.  So if you really want parens you need to write:\n\n  lastModified = (sender.getLastModified() / 1000) * 1000\n\nBut I don\'t bother because that\'s the natural order of operations as we are all taught in grade school, and as the language has defined it to be (because of our grade school teachings).','AAAAD3///2M=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ObjectFileServlet.java','AAAAD3///08='),(146,3,'2010-03-10 05:19:08','P',1,'Worth putting the 1000 * 1000 in parens to make it clear?',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ObjectFileServlet.java','AAAAD3///2M='),(146,3,'2010-03-10 05:19:08','P',1,'Even better to put the brackets in then. If you\'re dividing a number by 1000, then multiplying it by 1000, you\'re just normalising it to 3dp, right? It doesn\'t come out as that is being the intent. Putting the parens in would help others understand that directly.','AAAAD3///08=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ObjectFileServlet.java','AAAAD3///zw='),(148,1,'2010-03-10 05:19:08','P',1,'Yea, a regexp might perform better here by reducing the number of times we walk the string.  But would the regexp be easier to read and maintain?  Probably not.\n\nI actually can\'t think of how to write the regexp for this method.  Its pretty hideous.\n\nThis method is only called once per incoming HTTP request, and in servers like Gerrit Code Review, its actually not even going to be used.  (Gerrit will override it with its own database lookup.)  \n\nIts really not worth trying to optimize this in exchange for reduced readability.','AAAAD3///1k=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///0U='),(138,1,'2010-03-10 05:19:08','P',1,'Probably because it wouldn\'t line wrap nicely.  :-)','AAAAD3///1o=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///0Y='),(148,3,'2010-03-10 05:19:08','P',1,'There\'s a lot of walking of the name here. Would a regexp be more performant?',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///1k='),(138,3,'2010-03-10 05:19:08','P',1,'Why not do \n\nreturn isExportAll() || new File(...).exists()',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///1o='),(148,3,'2010-03-10 05:19:08','P',1,'Can we change the ordering so that we do the startsWith first, then the contains, then the new File construction? At least that way, we\'d fail faster, though in a successful case we\'d still drop through all of them.','AAAAD3///0U=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///zM='),(138,3,'2010-03-10 05:19:08','P',1,'When we start changing code style just to satisfy the formatter, I think we\'re doing something wrong. Having an if/return true is somewhat ugly if the next bit is an else/boolean as well. The use of a return x || b is used in a number of places in the code (e.g. for nullable entries) and the like.','AAAAD3///0Y=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/FileResolver.java','AAAAD3///zQ='),(69,1,'2010-03-10 05:19:08','P',1,'Yikes, I think you are right, we need to change this to ServiceNotAuthorizedException.','AAAAD3///y8=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/RepositoryResolver.java','AAAAD3///xk='),(69,4,'2010-03-10 05:19:08','P',1,'Shouldn\'t that be a ServiceNotAuthorizedException then ?',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/RepositoryResolver.java','AAAAD3///y8='),(107,1,'2010-03-10 05:19:08','P',1,'Probably not worth making x-gzip constant.  We reference it in only one location.\n\nBut, we probably don\'t actually have to support it.  The only clients that really matter are the JRE\'s internal client, and libcurl.  I think both use \"gzip\" and not \"x-gzip\".\n\nBut, there isn\'t any real harm in supporting it either.  We know how to unfold what is commonly called \"x-gzip\", as that\'s just an alias for \"gzip\".  Code\'s written.  We might as well just honor it.','AAAAD3///2I=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///00='),(207,1,'2010-03-10 05:19:08','P',1,'Why is this a bad spot to create a MessageDigest?  We want to compute the SHA-1 hash of the content array, the standard way we do that in JGit is to create a MessageDigest though this factory function, use it, and discard.  We usually don\'t pool MessageDigests because they tend to be fairly inexpensive.','AAAAD3///10=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///0g='),(197,1,'2010-03-10 05:19:08','P',1,'The objects are all pretty small.  We\'re only deflating plain text streams that we\'ve created in-memory.  E.g. taking a 16 KiB text and chopping it down to 8 KiB.  Anything large like an actual file content or pack file is streamed as-is to the client without additional compression (because its already been compressed).','AAAAD3///14=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///0k='),(142,1,'2010-03-10 05:19:08','P',1,'No, we don\'t have a constant.  But we have 3 references to text/plain in the http server code package.  *sigh*','AAAAD3///2A=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///0o='),(140,1,'2010-03-10 05:19:08','P',1,'Doh!  I have no good reason for why this wasn\'t just inlined into the getBytes and setCharacterEncoding calls that use it.  Though I can try to argue that by putting it into the local its harder to screw up the two calls that need the same encoding.  :-)','AAAAD3///2E=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///0s='),(118,1,'2010-03-10 05:19:08','P',1,'It depends on what you are talking about as to what the encoding decision is.\n\nGit generally prefers UTF-8, whenever possible, because it plays nicely in C as a char*, and because it can contain any Unicode character.  Commit messages and tag messages for example are UTF-8 unless somehow otherwise specified.\n\nFor some data, Git hasn\'t yet specified a particular encoding, but its actually just being difficult and refusing to, because the data is derived from file names and is using the readdir() return as-is without checking the platform\'s LC settings.\n\nWithin JGit I think I only use this function to return the objects/info/pack file.  That file\'s format is actually strictly defined as being a limited subset of US-ASCII (e.g. the character \"Z\" cannot appear in that file, nor can a horizontal tab, let alone a smart quote or a Cyrillic character).\n\nCalling it UTF-8 when its really US-ASCII is fine, UTF-8 is slightly more widely recognized as a character encoding these days.','AAAAD3///18=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///0w='),(207,3,'2010-03-10 05:19:08','P',1,'This seems like a bad place to have a method instantiating message digest objects ...',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///10='),(197,3,'2010-03-10 05:19:08','P',1,'How large are the objects likely to be? Could this take up a huge amount of memory?',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///14='),(118,3,'2010-03-10 05:19:08','P',1,'(for my edification) Has Git decided on UTF-8 for the encoding, now? Or is this just for JGit?',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///18='),(142,3,'2010-03-10 05:19:08','P',1,'Surely we must have a constant for text/plain somewhere ...',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///2A='),(140,3,'2010-03-10 05:19:08','P',1,'Why not in-line \'enc\'?',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///2E='),(107,3,'2010-03-10 05:19:08','P',1,'Worth making this an ENCODING_GZIP_LEGACY constant somewhere? Do we even need to support it?',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///2I='),(197,3,'2010-03-10 05:19:08','P',1,'OK','AAAAD3///0k=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///zc='),(142,3,'2010-03-10 05:19:08','P',1,'Can we make it a constant, but probably not as a rebase as with other comments?','AAAAD3///0o=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///zg='),(140,3,'2010-03-10 05:19:08','P',1,'Can we in-line in a future commit?','AAAAD3///0s=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///zk='),(118,3,'2010-03-10 05:19:08','P',1,'Thanks','AAAAD3///0w=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///zo='),(107,3,'2010-03-10 05:19:08','P',1,'If we\'re not going to do a constant in place, we should probably put the // NON -NLS thing to indicate it\'s not supposed to be translated.','AAAAD3///00=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///zs='),(207,3,'2010-03-10 05:19:08','P',1,'I\'m sorry, I wasn\'t clear.\n\nI meant that having Constants.newMessageDigest() seems like the wrong place to put a \'newMessageDigest()\' constructor, particularly if Constants is otherwise a class that just contains, well, constants.\n\nI agree we need to instantiate a new message digest at this point. But I think the factory belongs somewhere else; maybe even a MessageDigets class that we instantiate here directly with new MessageDigest().','AAAAD3///0g=',41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAAAD3///zY='),(73,3,'2010-03-10 05:19:08','P',1,'Constant for text/plain, as elsewhere?',NULL,41,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/TextFileServlet.java','AAAAD3///1w='),(111,3,'2010-03-10 05:19:08','P',1,'ENCODING_GZIP_LEGACY?',NULL,41,9,'org.eclipse.jgit/src/org/eclipse/jgit/util/HttpSupport.java','AAAAD3///1g='),(146,3,'2010-03-10 05:19:08','P',1,'Any reason not to put the parens in, as suggested last time? It can only help.',NULL,41,11,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ObjectFileServlet.java','AAAAD3///t4='),(174,1,'2010-03-10 05:19:08','P',1,'Fixed, thanks.','AAAAAn///4s=',44,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java','AAAAAn///4I='),(174,3,'2010-03-10 05:19:08','P',1,'I think this should be {@code .have}, right?',NULL,44,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java','AAAAAn///4s='),(296,3,'2010-03-10 05:19:08','P',1,'StringBuffer implements CharSequence, which the writeOne() method is looking for, so the toString is unnecessary here.',NULL,44,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java','AAAAA3///+k='),(74,3,'2010-03-10 05:19:08','P',1,'Since we\'re 1.5 based anyway, and we\'re using CharSequence, then why not make pckOut.writeString take a CharSequence instead of a String?',NULL,44,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java','AAAAA3///+o='),(296,1,'2010-03-10 05:19:08','P',1,'Fixed.','AAAAA3///+k=',44,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java','AAAAA3///88='),(74,3,'2010-03-10 05:19:08','P',1,'Both String and CharBuffer implement CharSequence; CharSequence is also random access. I\'m not sure what else the encoder needs?','AAAAA3///9A=',44,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java','AAAAA3///8s='),(74,1,'2010-03-10 05:19:08','P',1,'This doesn\'t buy us much.  The charset encoder needs a random access char object, which is either String or CharBuffer, and CharSequence is neither of those.','AAAAA3///+o=',44,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java','AAAAA3///9A='),(304,3,'2010-03-10 05:19:08','P',1,'Can we clarify which meaning this is:\n\n1) The argument \'line\' must end in LF\n2) Regardless of what you pass in, I\'m going to put LF on the end for you\n\nI suspect from the usage the former, but I don\'t know why \'writeOne\' needs to demand that lines must end in LF; if the protocol requires you to terminate each statement with a LF, then that\'s fine - but does this mean this fn can only be used to write out a complete \'sentence\' each time? \n\nIf this is just \'writing output\' then it should be possible to call this multiple times (e.g. writeOne(cap) writeOne(\' \') writeOne(capName)). But if the \'writeOne\' is a single advertisment line (as is) then why doesn\'t it add the newline for you?\n\nPS I\'ve dealt with an API where the \'write\' call automatically added a CRLF on the end for you, and it was a nightmare to maintain, esp. when writing out multiple \'lines\' because you always had to remember that you only added the CRLF *between* lines rather than at the end.',NULL,44,4,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefAdvertiser.java','AAAAA3///7U='),(91,3,'2010-03-10 05:19:08','P',0,'Is there a better place to do hex-processing than this script, say in a utility class? Do we need to do it anywhere else?',NULL,45,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineOut.java','AAAAAn///40='),(91,1,'2010-03-10 05:19:08','P',0,'We do it in maybe two places, AnyObjectId for example has to support hex formatting, and here.  I think I just inlined it here because packet formatting should be reasonably efficient, and ObjectId formatting is already quite specific to the 20 byte format making it harder to handle the 16 bits used here by a pkt-line.\n\nRawParseUtils has some decode functions for hex parsing.  We might be able to move the hex formatting to a RawFormatUtils or something.  Hasn\'t been a high priority, we don\'t poke this code that often to care enough about the potential duplication.','AAAAAn///40=',45,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineOut.java','AAAAAn///4Q='),(64,3,'2010-03-10 05:19:08','P',0,'Why is there a class called \'Constants\' that does encoding with UTF-8? Doesn\'t sound like there should be a utility method like that in a class containing constants.',NULL,45,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineOut.java','AAAAA3////U='),(64,1,'2010-03-10 05:19:08','P',0,'Hysterical raisins.   Yes, this encode method does not belong in a class called Constants.  Yes, we could refactor it.  Everyone references it.  A lot.  Including application code.  We\'re somewhat hesitant to move the method because it might break someone linking to us.\n\nFWIW, this is the wrong context to be raising that in.  We assume existing code is fine if its not touched by the current change.  If it bothers you much, open a bug against yourself in Bugzilla to attempt to refactor this at some point in the future and start doing said refactoring work yourself.  :-)','AAAAA3////U=',45,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineOut.java','AAAAA3///+w='),(133,3,'2010-03-10 05:19:08','P',1,'See other comment - \'Constants\' feels like the wrong named class for a utility method to perform encoding, even if it does define the UTF-8 string.',NULL,46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/InfoRefsServlet.java','AAAAA3////M='),(106,3,'2010-03-10 05:19:08','P',1,'Worth doing a flush here as well?',NULL,46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java','AAAAA3////I='),(106,3,'2010-03-10 05:19:08','P',1,'The general contract of close doesn\'t enforce this, and there have been cases where the close doesn\'t in fact do this (and just drops the connection). I don\'t think it\'s wrong to do it as well inside the try, but in the general bug-free case, you\'re right.','AAAAA3///9g=',46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java','AAAAA3///8k='),(106,1,'2010-03-10 05:19:08','P',1,'OK, os.flush() added to all of these sites where we are dealing with the output stream from the response object.','AAAAA3///8k=',46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java','AAAAA3///8Q='),(106,1,'2010-03-10 05:19:08','P',1,'Not necessary, our final block calls close, which has to flush any buffered data before the close completes.','AAAAA3////I=',46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java','AAAAA3///9g='),(112,3,'2010-03-10 05:19:08','P',1,'Personally, I\'d put this dummy implementation inside the ReceivePackFactory as a static named inner class, like:\npublic class ReceivePackFactory {\n  public static final Empty = new Empty();\n  public static class Empty extends ReceivePackFactory {\n    ... // methods throwing exception\n  }\n}\n\nYou can then use receivePackFactory = ReceivePackFactory.EMTPY (or substitute favourite name of choice). Possibly doesn\'t add much to reuse, but if you ever add a new method that you need to override in the ReceivePackFactory, you can add a dummy (exception-throwing) impl to the Empty class in the same file without having to change 2 source files (the client will still work in exactly the same way).\n\nI appreciate this is a minor, almost stylistic comment, and I\'d be OK with you ignoring it; but should we need to change the dummy methods in the future, it\'d be my preference to only have to do that in one source file instead of two (as well as permitting other callers to re-use the Empty one should they have the same requirements).',NULL,46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryRouter.java','AAAAA3////E='),(112,1,'2010-03-10 05:19:08','P',1,'Fixed.','AAAAA3////E=',46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/RepositoryRouter.java','AAAAA3///9U='),(110,3,'2010-03-10 05:19:08','P',1,'Is there the danger that the \'user\' will in fact be an e-mail address in the future, like alex.blewitt@gmail.com is my bugzilla login ID? If so, and you\'re using a @ to separate out the two, won\'t this end up in alex.blewitt@gmail.com@egit.eclipse.org? Maybe pass in the (default) host and user separately,and then let PersonIdent append the default host if needed.',NULL,46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/DefaultReceivePackFactory.java','AAAAA3////A='),(110,3,'2010-03-10 05:19:08','P',1,'I only mentioned it in case we had something post-processing later on which does something like indexOf(\'@\') to split the string up. It\'s not a big deal, if you think we won\'t see that kind of bug.','AAAAA3///9M=',46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/DefaultReceivePackFactory.java','AAAAA3///80='),(110,1,'2010-03-10 05:19:08','P',1,'I don\'t think we do that anywhere, and if we did, we\'d probably want to use lastIndexOf for exactly this reason.','AAAAA3///80=',46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/DefaultReceivePackFactory.java','AAAAA3///8M='),(110,1,'2010-03-10 05:19:08','P',1,'There isn\'t really anything wrong with the \"email\" field in the reflog holding user@domain@host.  And we are passing in the *remote* host here, which should be the hostname or IP address of the client (or proxy) which has connected.  That may be useful in the reflog to help track down where the connection originated from, which is why we are storing it at all.','AAAAA3////A=',46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/DefaultReceivePackFactory.java','AAAAA3///9M='),(66,3,'2010-03-10 05:19:08','P',1,'Good practice to put \'public\' on interface methods, even though it\'s not necessary? Argument for: if you put \'public\' you can just copy/paste the line into an implementing class, which would otherwise be an error. Argument against: it\'s the default for interfaces (but not for classes that you might paste it into). A suitable decision probably should be recorded on the EGit contributor code guidelines.',NULL,46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/ReceivePackFactory.java','AAAAA3///+4='),(55,3,'2010-03-10 05:19:08','P',1,'Red blob?',NULL,46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/ReceivePackFactory.java','AAAAA3///+8='),(55,1,'2010-03-10 05:19:08','P',1,'I rebased the entire series with --whitespace=fix, the red blobs should disappear.','AAAAA3///+8=',46,3,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/ReceivePackFactory.java','AAAAA3///9I='),(184,1,'2010-03-10 05:19:08','P',1,'Eh, doesn\'t really matter that much to me, but sure.','AAAAD3///9U=',46,7,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitServlet.java','AAAAD3///7E='),(184,3,'2010-03-10 05:19:08','P',1,'Worth making this a named (inner) class in a util package somewhere? Could parameterise the response code. e.g. serve().with(new ErrorServlet( SC_FORBIDDEN ))',NULL,46,7,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitServlet.java','AAAAD3///9U='),(92,1,'2010-03-10 05:19:08','P',1,'Line 43 says nocache is an import:\n\n  import static org.eclipse.jgit.http.server.ServletUtils.nocache;\n\nThis method is actually defined in change Ia0f1a425d07d035e344ae54faf8aeb04763e7487 as part of the ServletUtils class.\n\nNot everything is using nocache, in particular we allow loose object files and pack files to be cacheable.  But I\'m starting to think that may not be a good idea if access controls are enabled on the repository in the container.  I might respin the series to have this set through a filter that\'s on every servlet.','AAAAD3///9M=',46,7,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartServiceInfoRefs.java','AAAAD3///7I='),(79,1,'2010-03-10 05:19:08','P',1,'We have empty blocks warning enabled in most JGit projects, so Eclipse issues a warning here when we implement an interface method which has no action.\n\nConsequently we have a convention to write a comment into the method to indicate we really did mean to leave the implementation empty, and that also shuts up the warning.','AAAAD3///9Q=',46,7,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartServiceInfoRefs.java','AAAAD3///7M='),(92,3,'2010-03-10 05:19:08','P',1,'Where does nocache come from? And why should all services not have caching?',NULL,46,7,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartServiceInfoRefs.java','AAAAD3///9M='),(79,3,'2010-03-10 05:19:08','P',1,'Is this a coding convention to have a comment in an otherwise nop/empty body? It\'s not something I tend to see a lot of elsewhere.',NULL,46,7,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/SmartServiceInfoRefs.java','AAAAD3///9Q='),(249,3,'2010-03-10 05:19:08','P',1,'In both places you\'ve used this, you\'ve had if(n==null) return false. Why not push that down into the StringUtils, and document that if you pass in a null, it returns false? That\'s probably less likely to be a problem than the NullPointerException in the general case; and if there are callers that expect a different default-if-missing value, then they can test before calling.',NULL,46,10,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitServlet.java','AAAAD3///ts='),(420,3,'2010-03-10 05:19:08','P',1,'We should have a constants file for representing e.g. HTTP_METHOD_POST and HTTP_HEADER_CONTENT_TYPE',NULL,47,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3////0='),(390,3,'2010-03-10 05:19:08','P',1,'This could be a pre-defined (static final) instance of a static class, rather than an instance class instantiated anew each time.',NULL,47,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3////4='),(164,3,'2010-03-10 05:19:08','P',1,'Should this be some kind of constant rather than a String, to facilitate future NLS? We could pass in an int code INVALID_URL and a string:\nclass NotSupportException(int code, String data )\ntoString() { switch(code) case INVALID_URL: \"Invalid URL \" + data}\netc.',NULL,47,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3////8='),(437,3,'2010-03-10 05:19:08','P',1,'Can this be \'static\' ? I don\'t see that it\'s referring to anything in the enclosing class, but I could have missed where it is.',NULL,47,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3////w='),(390,1,'2010-03-10 05:19:08','P',1,'Fixed','AAAAA3////4=',47,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3///+c='),(437,1,'2010-03-10 05:19:08','P',1,'Fixed, yes, it should be static','AAAAA3////w=',47,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3///+Y='),(420,1,'2010-03-10 05:19:08','P',1,'Fixed, added to HttpSupport.','AAAAA3////0=',47,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3///90='),(164,1,'2010-03-10 05:19:08','P',1,'I\'m not sure how that helps NLS behavior very much.  We really just need a resource bundle which we can use to seed the exception with the error message for the current locale, or we need a unique exception object for every error code so the UI can handle the different types.','AAAAA3////8=',47,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3///94='),(164,3,'2010-03-10 05:19:08','P',1,'I don\'t think you need to create a new exception object for every message; rather, a class should be for a class of problems and the code could be a subclass of that problem (or a specific instance of that). However, let\'s leave the NLS aside for now so that we can get this going.','AAAAA3///94=',47,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3///9c='),(368,1,'2010-03-10 05:19:08','P',1,'We don\'t document private methods.  If the code isn\'t obvious to the reader it should be refactored to be obvious as-is, rather than documenting it.  That is part of the reason why this project has maintained (and continues to maintain) the rule \"thou shall not commit a change without a review by another committer\".  If its not obvious to another committer, its not obvious enough to survive.','AAAAAn///4k=',48,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java','AAAAAn///38='),(329,1,'2010-03-10 05:19:08','P',0,'Long ago I worked with C compilers that were too stupid to remove the boolean test for \"while (1)\".  So unending loops were written as \"for (;;)\" to work around it.  The Java compiler is obviously not that stupid, and neither are any modern C compilers, but habit is habit.\n\nOur coding standard at this point is more-or-less \"loop with no conditional\" is spelled as \"for (;;)\" because most of them have been written by me.','AAAAAn///4g=',48,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java','AAAAAn///4A='),(329,3,'2010-03-10 05:19:08','P',0,'I\'ve always found \'while(true)\' more canonical way of looping forever.',NULL,48,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java','AAAAAn///4g='),(368,3,'2010-03-10 05:19:08','P',1,'Might be worth documenting here what the return value of \'negotiate\' means, even if it\'s not a public method',NULL,48,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java','AAAAAn///4k='),(55,3,'2010-03-10 05:19:08','P',1,'What\'s this red blob in Gerrit for?',NULL,49,2,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/resolver/UploadPackFactory.java','AAAAA3////c='),(186,1,'2010-03-10 05:19:08','P',1,'Known bug on the color coding issue here.  Its issue 251 [1].\n\nRegarding the // at the end of the line, I rely very heavily on the Eclipse source code formatter style we have defined for the project.  When it doesn\'t break the lines nicely, I sometimes force the line breaking manually by renaming symbols until it breaks the way I want (and the name still makes sense), or I insert comments like this.\n\nIn this case the default breaking was unreadable compared to what I have forced manually.\n\n[1] http://code.google.com/p/gerrit/issues/detail?id=251','AAAAD3///9g=',49,6,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitServlet.java','AAAAD3///7U='),(186,3,'2010-03-10 05:19:08','P',1,'1) Gerrit colour coding gets this wrong, probably because of the */ in the string. Not that it\'s a biggie, I\'m just pointing it out so you can have a look in context.\n2) Not a big fan of the // with no comment at the end just so the .with goes onto a new line. I appreciate that it\'s in keeping with the rest of these though.',NULL,49,6,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitServlet.java','AAAAD3///9g='),(211,3,'2010-03-10 05:19:08','P',1,'Yup, saw it elsewhere, but wasn\'t immediately obvious about the hierarchy. So I\'m happy.','AAAAD3///1M=',49,7,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitServlet.java','AAAAD3///04='),(211,1,'2010-03-10 05:19:08','P',1,'ErrorServlet class was already introduced 3 commits back, in change Ia0f1a425d07d035e344ae54faf8aeb04763e7487.  So we can assume it exists here.','AAAAD3///2s=',49,7,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitServlet.java','AAAAD3///1M='),(211,3,'2010-03-10 05:19:08','P',1,'This looks good, but ErrorServlet isn\'t part of this change. Is this an existing servlet or a new one added in a different change? If it\'s a new one, should it be part of this changeset?',NULL,49,7,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitServlet.java','AAAAD3///2s='),(273,3,'2010-03-10 05:19:08','P',1,'Same comment as elsewhere',NULL,49,9,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitServlet.java','AAAAD3///tk='),(140,3,'2010-03-10 05:19:08','P',1,'Can we rename \'r\' to something else? It looks like it should be \'reader\' related, but it\'s a walk fetch connection.',NULL,50,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3////k='),(125,3,'2010-03-10 05:19:08','P',1,'Maybe define these services in some kind of constants/Interface as static final in a future change',NULL,50,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3////o='),(140,1,'2010-03-10 05:19:08','P',1,'The old code called it \"r\", I just changed the indentation level here.  We have a rule about not changing old code unless absolutely required.  For what its worth we/I have a habit of using \"r\" for return values when the scope is really small and there is little chance of confusing the meaning of the value.','AAAAA3////k=',50,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3///9o='),(125,3,'2010-03-10 05:19:08','P',1,'I know that it can\'t change, but as you say, it\'s used in two locations. So defining it once and then cross-referencing the constant means that we don\'t duplicate the string literal. \n\nIn addition, when it comes to pulling out strings to be translated, having these kind of strings as literals make for a more difficult job in figuring out magic strings (like this) vs human-readable text (which needs to be translated).\n\nFWIW Eclipse can put // $NON-NLS-1$ markers on the line (or similar) to indicate that it\'s a non-translatable string, but I thought we\'d see this string more than once.','AAAAA3///9s=',50,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3///9Q='),(125,1,'2010-03-10 05:19:08','P',1,'Why, what does making this service string static buy us?\n\nThat service name is part of the protocol, it can\'t change.  Its used in two locations, once in the client, once in the server.','AAAAA3////o=',50,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3///9s='),(140,3,'2010-03-10 05:19:08','P',1,'In this case, the introduction of the BufferedReader caused that confusion, since \'r\' can also mean \'reader\' (as in \'br\'). It was confusing whether we should be calling br.flush() or r.flush() since normally one flushes the outer reader; so I think the confusion is higher because of this change and merits the renaming of the variable rather than the case where there as a 3 line method with an \'r\' in it.','AAAAA3///9o=',50,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAA3///9Y='),(590,1,'2010-03-10 05:19:08','P',1,'Fixed in my upcoming respin, thanks.','AAAAD3///9o=',50,7,'org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java','AAAAD3///6c='),(590,3,'2010-03-10 05:19:08','P',1,'Worth putting a //$NON-NLS-1$  here to indicate that these are non-translatable strings? I think Eclipse has a quick-fix. It\'ll need two, one for the NL and one for the have.',NULL,50,7,'org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java','AAAAD3///9o='),(60,1,'2010-03-10 05:19:08','P',1,'You should also declare hashCode, equals and toString in the interface so they are abstract and an implementor is encouraged to override them in their implementation.',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///2w='),(119,1,'2010-03-10 05:19:08','P',1,'I think this should be the other direction.  java.io.FileOutputStream defines \"boolean append\", which defaults to false, because most often you want to overwrite a file.',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///30='),(106,1,'2010-03-10 05:19:08','P',1,'Since we are re-inventing the wheel here, I\'ve always thought java.io.File screwed up by not having an equivalent for POSIX\'s struct stat.\n\nIn other words, I wonder if we shouldn\'t define the API to return an object that can obtain information about the entry, but which can also cache that information.  So \"Entry\" is just the pointer to the location with:\n\n  public interface Entry {\n    ...\n    /** Obtain information about the entry; the resulting object\n         may use caches internally to reduce calls.  If you need\n         up-to-date information, obtain a new EntryStatus. */\n    public EntryStatus status();\n    ...\n  } \n\n  /** Cached status information about an Entry */\n  public interface EntryStatus {\n      public static enum Type {\n        FILE, DIRECTORY\n      }\n\n      public long length();\n      public boolean exists();\n      public Type type();\n  }\n\nAnd then we can write a java.io.File version of this interface as:\n\n    static class FileEntryStatus {\n        private final File path = ...;\n        private long length = -1;\n\n        public long length() {\n          if (length < 0)\n            length = path.length();\n          return length;\n        }\n    }',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///34='),(111,1,'2010-03-10 05:19:08','P',1,'Maybe we should define FileNotFoundException if the item doesn\'t exist, and IOException for other failures?',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///38='),(85,1,'2010-03-10 05:19:08','P',1,'isExists is awkward to me.  Both java.io.File and Eclipse\'s IContainer just use exists for this operation.',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///4A='),(72,1,'2010-03-10 05:19:08','P',1,'Why are we exposing this?  If a caller needs the path, shouldn\'t they only rely on the URI\'s external form?',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///4E='),(190,1,'2010-03-10 05:19:08','P',1,'Why the hell are we converting from File to URI just to convert back to File?  Why can\'t we just create a LocalFileEntry directly right here?',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///20='),(200,1,'2010-03-10 05:19:08','P',1,'This seems like a really expensive way to do:\n\n  File c = new File(getLocalFile(), name);\n  if (c.exists())\n    return new LocalFileEntry(c, getStorageSystem());\n  return null;',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///24='),(66,1,'2010-03-10 05:19:08','P',1,'Missing the following methods:\n\n* hashCode\n* equals\n* toString',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///2s='),(169,1,'2010-03-10 05:19:08','P',1,'This entire method is overly complicated.  It can be written just fine as:\n\n  public OutputStream getOutputStream(boolean append) throws IOException {\n    return new FileOutputStream(getLocalFile(), append);\n  }',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///3A='),(73,1,'2010-03-10 05:19:08','P',1,'\"based of on the\" is awkward',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///3c='),(152,1,'2010-03-10 05:19:08','P',1,'Pointless catch block.',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///3E='),(70,1,'2010-03-10 05:19:08','P',1,'final',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///3g='),(177,1,'2010-03-10 05:19:08','P',1,'Pointless catch block.',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///3I='),(69,1,'2010-03-10 05:19:08','P',1,'final',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///3k='),(148,1,'2010-03-10 05:19:08','P',1,'Pointless test.  The FileInputStream constructor already does this stat call, and throws FileNotFoundException if the item doesn\'t exist in the filesystem.',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///3M='),(113,1,'2010-03-10 05:19:08','P',1,'Why are you allowed to change this?  It should be immutable.',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///3U='),(91,1,'2010-03-10 05:19:08','P',1,'Why are you allowed to change this?  It should be immutable.',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///3Y='),(69,1,'2010-03-10 05:19:08','P',1,'Our style usually cuddles the else on the prior line with the closing brace.  But when there\'s only one line inside a block we often omit the braces.',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileSystem.java','AAAAA3///3s='),(59,1,'2010-03-10 05:19:08','P',1,'SCHEME_FILE instead?',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileSystem.java','AAAAA3///3w='),(66,1,'2010-03-10 05:19:08','P',1,'Should implementers return null if passed null?  Or should they throw NPE right away?',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/StorageSystem.java','AAAAA3///3o='),(74,1,'2010-03-10 05:19:08','P',1,'Does this really matter for anything that isn\'t java.io.File?',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/StorageSystem.java','AAAAA3///4I='),(59,1,'2010-03-10 05:19:08','P',1,'Please don\'t use short URLs in javadoc, we don\'t know how long the short URL service is going to stay around.  Use the complete original URL.',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/StorageSystem.java','AAAAA3///4M='),(61,1,'2010-03-10 05:19:08','P',1,'URI calls this getScheme(), why not use the same name here?',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/StorageSystem.java','AAAAA3///4Q='),(145,1,'2010-03-10 05:19:08','P',1,'Why would someone pass null here and not expect a failure?',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/StorageSystemManager.java','AAAAA3///4c='),(64,1,'2010-03-10 05:19:08','P',1,'IIRC our style guide is 1 tab indent, not 2 spaces.',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/StorageSystemManager.java','AAAAA3///4g='),(56,1,'2010-03-10 05:19:08','P',1,'We don\'t do @author tags.',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/StorageSystemManager.java','AAAAA3///4U='),(157,1,'2010-03-10 05:19:08','P',1,'Again, why would someone want to register null and not have a failure?',NULL,57,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/StorageSystemManager.java','AAAAA3///4Y='),(142,1,'2010-03-10 05:19:08','P',1,'Should be moved to the prior commit, don\'t fix up prior commit bugs in later commits, especially if the later commit isn\'t specifically addressing that one issue.',NULL,58,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///2c='),(103,1,'2010-03-10 05:19:08','P',1,'Or we could define a 3-way value:\n\n  public static enum Executable {\n    EXECUTABLE,\n    NORMAL_ENTRY,\n    UNSUPPORTED\n  }\n\nsince pretty much any caller of this method should *also* consult isExecutableSupported above, which makes for 4 states when only 3 make sense (what does it say when isExecutableSupported = false but isExecutable = true)?',NULL,58,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///2g='),(93,1,'2010-03-10 05:19:08','P',1,'Why isn\'t this a property for the StorageSystem?  Is it because some filesystems might not support executable bit, while others do, e.g. mounting an MS-DOS partition on a Linux system, the ext2 directories might support executable bits, but the MS-DOS directory doesn\'t.\n\nThe method Javadoc implies its only the OS and JRE that matter here, but then it could just be on the StorageSystem.',NULL,58,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///2k='),(152,1,'2010-03-10 05:19:08','P',1,'Should be moved to the prior commit, don\'t fix up prior commit bugs in later commits, especially if the later commit isn\'t specifically addressing that one issue.',NULL,58,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///2U='),(240,1,'2010-03-10 05:19:08','P',1,'Why can\'t these be inside of LocalFileSystem?\n\nHeck, we could actually do two different versions of LocalFileSystem, one compiled against Java5 which always fails in these methods, and one which extends it, is compiled against Java6, and uses a direct method call to the java.io.File executable methods, rather than relying on reflection.  And use reflection to actually load the class code.\n\nBasically, this is a mess here, I\'d rather shift this into the LFS class where we can at least extend and override with a JVM specific variant that doesn\'t require reflection, or this mess of try/catch/throw Error.',NULL,58,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///2I='),(167,1,'2010-03-10 05:19:08','P',1,'With all of the branches this has caused, I *much* prefer the existing FS interface and its 4 subclasses with their overridden methods.\n\nWhy can\'t this IO package use those until its the last caller, and then integrate them into itself?  Its extremely difficult to review this reformatted version of the code to ensure the logic is still equivalent.',NULL,58,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileSystem.java','AAAAA3///10='),(95,1,'2010-03-10 05:19:08','P',1,'You shouldn\'t be able to get here.  See my remark about putting this method on Entry/LocalFileEntry such that this is impossible.',NULL,58,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileSystem.java','AAAAA3///14='),(67,1,'2010-03-10 05:19:08','P',1,'Non final static fields should not be public.',NULL,58,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileSystem.java','AAAAA3///2A='),(89,1,'2010-03-10 05:19:08','P',1,'Why isn\'t this a method on Entry?\n\n   public Entry resolveChild(String path);\n\nWhich... isn\'t that just like getChild?  Except we accept a path here, not just a name, and we may incur a very expensive stat hit due to forking to compute a symlink on some systems, and getChild doesn\'t do that.\n\nIf you are trying to replace FS.resolve you really should also drag over the discussion in the method\'s Javadoc, like how expensive it is to execute, why this should be used over getChild(), why getChild should be used over resolve().  Etc.',NULL,58,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/StorageSystem.java','AAAAA3///2M='),(80,1,'2010-03-10 05:19:08','P',1,'You never talk about home directory in the commit message.',NULL,58,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/StorageSystem.java','AAAAA3///2Q='),(201,1,'2010-03-10 05:19:08','P',1,'Maybe \"create()\" is better.  I think the new is implied by the fact that we are creating it.\n\nBut given that an Entry can be a Directory or a Stream (aka a file) maybe this should indicate better that it creates a stream here and not a directory.\n\nSo instead:\n\n  public boolean createDirectory();  // instead of mkdirs\n  public boolean createStream();',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///04='),(216,1,'2010-03-10 05:19:08','P',1,'Why are we exposing this implementation detail?',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///1E='),(216,13,'2010-03-10 05:19:08','P',1,'I did that part for minimizing change in FileLock code, I just wanted to API\'zd it, it was a serious mistake :(, will fix the whole locking issue in next round.','AAAAA3///1E=',59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///xU='),(201,13,'2010-03-10 05:19:08','P',1,'Well I like the mkdirs as it is more common for file like operations so I would go for \"create\" :).','AAAAA3///04=',59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///xY='),(181,1,'2010-03-10 05:19:08','P',1,'If lock is true you just truncated a file that wasn\'t supposed to be modified until the new version was fully written to disk *and* the lock was released.\n\nGit relies on doing atomic updates on the filesystem by writing the new content to a new temporary file, and renaming that over the real file name once the new content is completely written.  This method *COMPLETELY* ignores that scheme, making it incompatible and useless for JGit.',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///08='),(79,1,'2010-03-10 05:19:08','P',1,'Ugh.  It was bad enough that we had to use an extra 16 bytes per File (8 byte object header for LockFileEntry, 2 fields for localFile and storageSystem) but now we need *another* 8 bytes for the lock file data that few if any LocalFileEntries will need?',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///1A='),(181,13,'2010-03-10 05:19:08','P',1,'I actually probably made a disastrous design issue here :( as I was giving priority to port FileLock more easily and was not giving priority to lock simplification, I guess, thats a mistake I made, will fix this lock staff in next round, at least will try.','AAAAA3///08=',59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///x0='),(79,13,'2010-03-10 05:19:08','P',1,'Never thought of it that way :(, will surely pay more attention next round.','AAAAA3///1A=',59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///xQ='),(203,1,'2010-03-10 05:19:08','P',1,'So callers can easily catch IOException when dealing with file IO and abort and recover, but callers can\'t easily catch lock failures, abort and recover?',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/AbstractLockable.java','AAAAA3///1I='),(66,1,'2010-03-10 05:19:08','P',1,'Ugh.  We shouldn\'t rely on GC to release locks.  If a caller leaks a lock and doesn\'t release it, the lock probably should stay held indefinitely.  The caller might not have fully cleaned up after themselves, another access to the same resource could find it in an inconsistent state.  Its also easier to identify a caller who didn\'t clean up if the entire system grinds to a halt because the lock is still valid and nobody can get it anymore.  If the system sometimes suddenly frees up because a GC ran and finalization ran, then its a lot harder to identify a problem.',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/AbstractLockable.java','AAAAA3///1M='),(203,13,'2010-03-10 05:19:08','P',1,'Well, the issue is with the Lock interface it does not throw IOException for lock() and lockInteruptablly() so needed to take this way; but should have had\nit documented in Lockable by overriding them, that will be done in next round.','AAAAA3///1I=',59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/AbstractLockable.java','AAAAA3///xI='),(66,13,'2010-03-10 05:19:08','P',1,'Agree! Will change in LockManager.','AAAAA3///1M=',59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/AbstractLockable.java','AAAAA3///xM='),(54,1,'2010-03-10 05:19:08','P',1,'Do we really want to have to implement something like newCondition() as specified by the Lock interface?  Why do we even need to conform to their semantics?',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/Lockable.java','AAAAA3///1o='),(54,13,'2010-03-10 05:19:08','P',1,'It is useless if we think from egit perspective, but in the long run conforming a standard lock API will benefit us when using HBase or AppEngine at the backend; I am not sure why it will be used just now, but it might and the implementation is not that difficult. IMHO, we should retain it.','AAAAA3///1o=',59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/Lockable.java','AAAAA3///xE='),(69,1,'2010-03-10 05:19:08','P',1,'No point in Hashtable if you are protecting the map yourself anyway by your own synchronized methods.',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/LockManager.java','AAAAA3///1c='),(65,1,'2010-03-10 05:19:08','P',1,'Blank line after method before next declaration.',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/LockManager.java','AAAAA3///1g='),(60,1,'2010-03-10 05:19:08','P',1,'Race condition, multiple instances could be constructed at once.',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/LockManager.java','AAAAA3///1k='),(94,1,'2010-03-10 05:19:08','P',1,'Unnecessary assignment to 0.',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/LockManager.java','AAAAA3///1Q='),(95,1,'2010-03-10 05:19:08','P',1,'Should be final.',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/LockManager.java','AAAAA3///1U='),(81,1,'2010-03-10 05:19:08','P',1,'Unnecessary given the next two lines which perform a get and test for null on the result.',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/LockManager.java','AAAAA3///1Y='),(109,13,'2010-03-10 05:19:08','P',1,'This unlocking will go from here to retain the lock for infinity as commented on abstract lockable.',NULL,59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/LockManager.java','AAAAA3///xc='),(95,13,'2010-03-10 05:19:08','P',1,'Agree!','AAAAA3///1U=',59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/LockManager.java','AAAAA3///xg='),(94,13,'2010-03-10 05:19:08','P',1,'Well, I know its unnecessary but I like to initialize to default values, if its not a performance issue, I guess I will still retain it.','AAAAA3///1Q=',59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/LockManager.java','AAAAA3///xk='),(81,13,'2010-03-10 05:19:08','P',1,'Some habits just die hard :(, thanks for pointing it, it will simply vanish in next round...','AAAAA3///1Y=',59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/LockManager.java','AAAAA3///xo='),(69,13,'2010-03-10 05:19:08','P',1,'I was actually a bit confused what to use, so will be switching to HashMap','AAAAA3///1c=',59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/LockManager.java','AAAAA3///xs='),(60,13,'2010-03-10 05:19:08','P',1,'Agree! Don\'t know why I made this trivial mistake. Will instead make it final and move it to a static initializer block.','AAAAA3///1k=',59,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/LockManager.java','AAAAA3///xw='),(161,1,'2010-03-10 05:19:08','P',1,'I\'m very confused from the Javadoc above.  When we ask for a lock, but the lock fails to be acquired (already held by someone else), what does this method do, exactly?',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///sQ='),(109,1,'2010-03-10 05:19:08','P',1,'There\'s no way to abort.  If we fail to write to the lock file (e.g. because the disk is full) closing the lock file so we can delete it and abort to the caller will replace the main file, potentially destroying the user\'s repository.',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/GitLockOutputStream.java','AAAAA3///r0='),(112,1,'2010-03-10 05:19:08','P',1,'Just use + here, the compiler will rewrite it to use StringBuilder and the code will be easier to read.',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/GitLockOutputStream.java','AAAAA3///r4='),(156,1,'2010-03-10 05:19:08','P',1,'You can\'t use this to reliably lock the file.\n\nYou must use java.io.File.createNewFile to create the entry on disk, because in POSIX we must use open with the O_CREAT flag to ensure we are the only process which created this entry in the parent directory.  This is required to be compatible with C Git\'s locking protocol on POSIX platforms.',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/GitLockOutputStream.java','AAAAA3///r8='),(151,1,'2010-03-10 05:19:08','P',1,'Don\'t open the lock stream twice during append.  Open it once, copy the data from the main file, then leave it open for the other writing operations we will do.',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/GitLockOutputStream.java','AAAAA3///sA='),(149,1,'2010-03-10 05:19:08','P',1,'Flip the order, use appendMode && mainFile.exists() so we only pay the stat call if we enable append mode.',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/GitLockOutputStream.java','AAAAA3///sE='),(378,1,'2010-03-10 05:19:08','P',1,'Style-nit: unnecessary local variable',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///ro='),(341,1,'2010-03-10 05:19:08','P',1,'Style nit:  Given that the above if success returns, then fall-through into the else occurs only if we have more work to do.  It is much more readable to read code written as:\n\n  if (condition1)\n    return result;\n\n  try something else\n  if (condition2)\n    return result;\n\n  try something else\n  if (condition3)\n    return result;\n\n  fail\n\nThan it is to read:\n\n  if (condition1) {\n    return result;\n  } else {\n    try something else\n    if (condition2) {\n      return result;\n    } else {\n      if (condition3) {\n        return result;\n      } else {\n        fail\n      }\n    }\n  }',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///rs='),(191,1,'2010-03-10 05:19:08','P',1,'What good does a recursive file lock do when our calling thread already has this same file path open in a different OutputStream?  \n\nShouldn\'t this crash on Windows because you can\'t have two write handles open against the same path name at the same time, especially if you lock the entire file region on each?\n\nShouldn\'t this also crash on any POSIX system for the same reason?',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///rw='),(198,1,'2010-03-10 05:19:08','P',1,'This entire set of conditions is insane.\n\nAll of it can be simplified down into:\n\n  return new FileOutputStream(getLocalFile(), !overwrite);\n\nThere is no need to racily stat for the file\'s existence before trying to setup the constructor call.',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/localfs/LocalFileEntry.java','AAAAA3///sM='),(97,1,'2010-03-10 05:19:08','P',1,'This smells like its over-engineered.  We don\'t currently use conditions in JGit.  Why do we need to be able to create multiple of them per file entry?',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/AbstractLockable.java','AAAAA3///rg='),(68,1,'2010-03-10 05:19:08','P',1,'I\'m quite unhappy with the fact that our lightweight java.io.File wrapper requires finalization for every instance.  Finalization really slows down GC because the object can\'t be removed immediately, it must be preserved through the GC and stuck on the Finalizer queue, and wait for the Finalizer to run.',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/AbstractLockable.java','AAAAA3///rk='),(130,1,'2010-03-10 05:19:08','P',1,'Why are we waiting for at most the amount of time we waited for the internal lock?  Shouldn\'t we wait time - duration here, that is, whatever is left over of the caller\'s maximum wait?',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/lock/AbstractLockable.java','AAAAA3///rY='),(63,1,'2010-03-10 05:19:08','P',1,'You maybe should say you are copying the entire stream until EOF.',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/utils/IOUtils.java','AAAAA3///sU='),(57,1,'2010-03-10 05:19:08','P',1,'Why are you doing IO in such small odd-sized units?\n\nUse 2048, 4096, 8192 or 16384 for the buffer size.  If the underlying streams are BufferedInputStream or BufferedOutputStream you\'ll bypass the buffer and avoid unnecessary copying.  If the underlying streams are disk IO streams, you\'ll perform roughly page sized and page aligned IOs, which makes the filesystem code in most OS kernels rather happy.\n\nAlso, there is no reason for this to be public, its only relevant to the copy method in this class.',NULL,59,2,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/utils/IOUtils.java','AAAAA3///sY='),(22,4,'2009-10-15 20:18:02','P',1,'remove trailing whitespace',NULL,60,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commands/ProjectNameParameterValues.java','AAAAA3///5U='),(24,4,'2009-10-15 20:18:02','P',1,'remove trailing whitespace',NULL,60,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commands/ShareSingleProjectCommand.java','AAAAA3///5Q='),(35,4,'2009-10-15 22:19:45','P',1,'style nit: we don\'t put braces around single line blocks',NULL,60,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commands/ProjectNameParameterValues.java','AAAAA3///4w='),(1,1,'2010-03-10 15:26:29','P',1,'Our sources are encoded UTF-8.',NULL,63,1,'org.eclipse.jgit.releng/build.linux.properties','AAAAA3///0Q='),(1,4,'2010-03-10 15:26:29','P',1,'doubt: where do we depend on GEF-zest ?',NULL,63,1,'org.eclipse.jgit.releng/build.linux.properties','AAAAA3///50='),(1,1,'2010-03-10 15:26:29','P',1,'Our sources are encoded UTF-8.',NULL,63,1,'org.eclipse.jgit.releng/build.macosx.properties','AAAAA3///0U='),(1,1,'2010-03-10 15:26:29','P',1,'Our sources are encoded UTF-8.',NULL,63,1,'org.eclipse.jgit.releng/build.properties','AAAAA3///0Y='),(1,1,'2010-03-10 15:26:29','P',1,'These are all mixed spaces-before-tabs indentation.\n\nWe prefer tab indentation in JGit, and if you must use spaces to get alignment right, tabs should still be used before spaces on a line.',NULL,63,1,'org.eclipse.jgit.releng/build.xml','AAAAA3///0c='),(1,4,'2010-03-10 15:26:29','P',1,'please remove the trailing whitespace',NULL,63,1,'org.eclipse.jgit.releng/build.xml','AAAAA3///5w='),(1,4,'2010-03-10 15:26:29','P',1,'please remove trailing whitespace',NULL,63,1,'org.eclipse.jgit.releng/category.xml.example','AAAAA3///5s='),(1,11,'2010-03-10 15:26:29','P',1,'One more trailing whitespace... Shawn and Matthias would be dissappointed ;-)',NULL,63,1,'org.eclipse.jgit.releng/promote-N.properties','AAAABH///60='),(1,4,'2010-03-10 15:26:29','P',1,'please remove the trailing whitespace',NULL,63,1,'org.eclipse.jgit.releng/promote.xml','AAAAA3///54='),(1,4,'2010-03-10 15:26:29','P',1,'please remove trailing whitespace',NULL,63,1,'org.eclipse.jgit.releng/testing.properties','AAAAA3///5o='),(118,1,'2009-10-16 16:36:52','P',1,'Indentation right here is wrong, its a whole extra level in.',NULL,68,1,'org.eclipse.egit.ui/plugin.xml','AAAAA3///0E='),(31,1,'2009-10-16 16:36:52','P',1,'Unnecessary trailing whitespace.',NULL,68,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/IgnoreAction.java','AAAAA3///0A='),(41,1,'2009-10-16 16:36:52','P',1,'Unnecessary trailing whitespace.',NULL,68,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/IgnoreAction.java','AAAAA3///z0='),(60,1,'2009-10-16 16:36:52','P',1,'Unnecessary trailing whitespace.',NULL,68,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/IgnoreAction.java','AAAAA3///z4='),(40,1,'2009-10-16 16:36:52','P',1,'Unnecessary trailing whitespace.',NULL,68,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/IgnoreAction.java','AAAAA3///z8='),(55,1,'2009-10-16 16:36:52','P',1,'This ByteArrayOutputStream is unnecessary if you are only appending in one encoded string.',NULL,68,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/IgnoreAction.java','AAAAA3///zk='),(74,1,'2009-10-16 16:36:52','P',1,'Unnecessary trailing whitespace.',NULL,68,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/IgnoreAction.java','AAAAA3///zo='),(71,1,'2009-10-16 16:36:52','P',1,'Unnecessary trailing whitespace.',NULL,68,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/IgnoreAction.java','AAAAA3///zs='),(59,1,'2009-10-16 16:36:52','P',1,'Unnecessary trailing whitespace.',NULL,68,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/IgnoreAction.java','AAAAA3///zw='),(48,1,'2009-10-16 16:37:29','P',1,'Might as well squash to the prior patch while respinning the prior one to address style nits.',NULL,69,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/IgnoreAction.java','AAAAA3///zc='),(89,4,'2009-10-16 15:30:07','P',1,'probably typo: s/changed/changes/',NULL,72,1,'org.eclipse.egit.ui/plugin.properties','AAAAA3///2E='),(58,1,'2009-10-16 19:33:09','P',1,'This is completely common to both blocks, can\'t we allocate it once and not duplicate the code?',NULL,76,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/IgnoreAction.java','AAAAA3///yA='),(221,1,'2010-03-10 05:19:08','P',1,'Most would call this getLastModifiedTime since it includes the time and isn\'t just the date.',NULL,81,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///so='),(219,1,'2010-03-10 05:19:08','P',1,'What units?  I\'m sure you mean milliseconds here, but lets be specific about it in the documentation.',NULL,81,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///ss='),(245,1,'2010-03-10 05:19:08','P',1,'No, I think we should return void here and throw:\n\n* ArrayIndexOutOfBoundsException:  when offset + size < buffer.length\n* EOFException:  when position + size < this.length()\n\nAlso, I\'m a bit concerned about the fact that the API is using the Entry to perform the read.  In the classical java.io implementation this is just a lightweight wrapper around java.io.File.  Which means a readRandomly must open the file, perform the read, then close it before returning.\n\nFor pack file data access that translates into 3 system calls per data block read, vs. the current situation where we have 1 call per block read, and are able to amortize out the file descriptor open and close over all of the accessed blocks.\n\nAlso, this opens some potential race conditions.  If we open a pack file on POSIX or Win32 we are certain we can continue to read from it until we close it.  If the repository is repacked while we are reading, we may get part of an object in one block, then need to go back and get the next block.  The repacker may delete this pack and replace it with something else entirely, or even evict the object to become loose.  It will significantly complicate our reading code if we have to handle the file disappearing or being replaced anytime we issue a read against it.',NULL,82,1,'org.eclipse.jgit.io/src/org/eclipse/jgit/io/Entry.java','AAAAA3///sg='),(89,1,'2010-03-10 05:19:08','P',1,'Style-nit: Unnecessary parens around expression.',NULL,87,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffTestDataGenerator.java','AAAAA3///tQ='),(79,1,'2010-03-10 05:19:08','P',1,'Probably could pass len here to allocate the underlying char[] at the correct size.',NULL,87,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffTestDataGenerator.java','AAAAA3///tU='),(65,1,'2010-03-10 05:19:08','P',1,'Typo on skipLenght',NULL,87,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffTestDataGenerator.java','AAAAA3///tY='),(95,8,'2010-03-10 05:19:08','P',1,'Please add the checked value as the message string here for quicker diagnosis.',NULL,87,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAAA3///qY='),(66,1,'2010-03-10 05:19:08','P',1,'How about renaming this to \"runningTime\" ?',NULL,87,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAAA3///s0='),(146,1,'2010-03-10 05:19:08','P',1,'Style-nit: Unnecessary parens',NULL,87,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAAA3///s4='),(154,1,'2010-03-10 05:19:08','P',1,'private final',NULL,87,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAAA3///s8='),(149,1,'2010-03-10 05:19:08','P',1,'Style-nit: unnecessary utility method, I would just use new CharArray at its two call sites.',NULL,87,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAAA3///tA='),(112,1,'2010-03-10 05:19:08','P',1,'Since we always say a factor of 10, can we just make this a private static final and not pass it to checkPerfData every time?',NULL,87,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAAA3///tE='),(107,1,'2010-03-10 05:19:08','P',1,'Please don\'t println during normal unit tests.\n\nI would suggest making this conditional on a system property, or writing it to a trace file.  Basically, it annoys me to see the Console pop open in Eclipse to show output whenever I run unit tests to verify code changes.',NULL,87,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAAA3///tI='),(88,1,'2010-03-10 05:19:08','P',1,'Style-nit: We don\'t put braces around a simple expression like this one, and the one after it.',NULL,87,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAAA3///tM='),(164,1,'2010-03-10 05:19:08','P',1,'If I understood your code right, this loop never terminates if the stopwatch doesn\'t work correctly on this VM.  We never increment cpuTimeChanges because readout always returns 0, and interimTime is always below longTaskBoundary.',NULL,87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAABH///+I='),(176,1,'2010-03-10 05:19:08','P',1,'Style-nit: trailing whitespace',NULL,87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAABH///+k='),(9,1,'2010-03-10 05:19:08','P',1,'Can we get a more consistent copyright line for your work?  Here you use SAP AG with no email, but in your new CPUTimeStopWatch class you use a different copyright line that I guess is the same (you at a sap email address).\n\nI\'m not against two copyright lines for you if one is \"stuff at work owned by SAP\" and the other is \"stuff on free time that SAP doesn\'t own\", but if they are the same (\"stuff at work that SAP owns\") it\'d be nice if they were consistent.',NULL,87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAABH///+Q='),(73,1,'2010-03-10 05:19:08','P',1,'Since this is used only within the one test method, wouldn\'t it be a good idea to make it a local variable of that test method and avoid making it static?',NULL,87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAABH///+U='),(9,5,'2010-03-10 05:19:08','P',1,'I\'ll go for the pure email-adress copyright without again mentioning the company.','AAAABH///+Q=',87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAABH///8g='),(164,5,'2010-03-10 05:19:08','P',1,'Yes, you are right. That\'s a major bug. To be honest: this code never run on VMs which don\'t support CPU-time. I was not able to find such VMs and too lazy to mock the cpu-time feature. My idea was to skip test execution completely if cpu-time info is not available. I\'ll add this','AAAABH///+I=',87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAABH///8k='),(110,5,'2010-03-10 05:19:08','P',1,'Yes, you are right. This parameter is for performance tests where we diff random data. Such tests do not exist yet. I added the parameter just to be prepared when such tests are written.','AAAABH///8w=',87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAABH///8o='),(110,8,'2010-03-10 05:19:08','P',1,'I see no other actual value than 1 passed here. Do we need this parameter?\nIs it related to the worst-case behaviour for which there is no test?',NULL,87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/MyersDiffPerformanceTest.java','AAAABH///8w='),(62,1,'2010-03-10 05:19:08','P',1,'Why not private?  Were you planning to access this from another class?  How is that useful without the mxBean?\n\nAnd why initialize to 0 when the JVM will automatically do that for you?',NULL,87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/CPUTimeStopWatch.java','AAAABH///+c='),(81,1,'2010-03-10 05:19:08','P',1,'Aren\'t you missing a test here on cpuTimeSupported flag?  This test always throws if the parameter was \"true\", even if the JVM actually supports the feature.',NULL,87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/CPUTimeStopWatch.java','AAAABH///+g='),(88,8,'2010-03-10 05:19:08','P',1,'Use a lower case  \'s\' here and elsewhere unless it\'s a class or name',NULL,87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/CPUTimeStopWatch.java','AAAABH///84='),(53,8,'2010-03-10 05:19:08','P',1,'Insert  a <p> in the empty line  to make the new paragraph come out as a paragraph. If you use Eclipse you can proof your javadoc by hovering over the class (or method name).',NULL,87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/CPUTimeStopWatch.java','AAAABH///88='),(81,5,'2010-03-10 05:19:08','P',1,'Yes, you are right. I\'ll fix it.','AAAABH///+g=',87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/CPUTimeStopWatch.java','AAAABH///8c='),(50,8,'2010-03-10 05:19:08','P',1,'Start sentences with a capital letter, e.g. \"A simple...\"',NULL,87,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/CPUTimeStopWatch.java','AAAABH///9A='),(113,4,'2010-03-10 05:19:08','P',1,'trailing whitespace',NULL,96,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IO.java','AAAAA3///vU='),(57,4,'2010-03-10 05:19:08','P',1,'trailing whitespace',NULL,96,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/IO.java','AAAAA3///vY='),(188,1,'2010-03-10 05:19:08','P',0,'This directory can be safely removed.  It was removed from C Git in 75c384efb52d0e3eb1e8c2f53668b4066fe6a8d6 (\"Do not create $GIT_DIR/remotes/ directory anymore\") by Junio C Hamano on Dec 19 2006.  C Git hasn\'t made it for almost 3 years, time for JGit to stop.',NULL,98,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAAAA3///uU='),(187,1,'2010-03-10 05:19:08','P',0,'This directory has to stay.\n\nThe recent discussion on the Git mailing list has brought out the fact that Git has promised prominent kernel maintainers that this directory will stay, as it is part of their workflow.\n\nPlease edit your patch to insert it back.',NULL,98,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAAAA3///uY='),(1,4,'2010-03-10 15:26:29','P',1,'Eclipse claims that the pgm plugin currently does not depend on the following packages in the current import-package list :\n\n- com.jcraft.jsch\n- org.eclipse.jgit.diff\n- org.eclipse.jgit.fnmatch\n- org.eclipse.jgit.merge\n- org.eclipse.jgit.patch\n- org.eclipse.jgit.util\n- org.eclipse.jgit.util.io\n\nIs it by intention that you already declare dependencies on these packages or should we better wait until we need them ?',NULL,102,1,'org.eclipse.jgit.pgm/META-INF/MANIFEST.MF','AAAAA3///oE='),(1,1,'2010-03-10 15:26:29','P',0,'If I used a single ignore at the top level with the lines:\n\n  bin\n  target\n\nthese would match in *every* subdirectory within the entire repository.  Thus a source package called \"bin\" or \"target\" would be omitted, which may lead a contributor to forget to git add something they have created.\n\nThe only safe way to force limit these to the top of each plugin directory is to use a leading \"/\" as I have done.  I could use an identical file in each plugin (as this patch does), or I could have used a single top-level file with every plugin:\n\n  /org.eclipse.jgit/bin\n  /org.eclipse.jgit/target\n  /org.eclipse.jgit.test/bin\n  /org.eclipse.jgit.test/target\n\nEither form is ugly, but using the identical file makes it easier to setup a new project as you just need to cp .gitignore.','AAAABH///90=',103,2,'.gitignore','AAAABH///7o='),(1,11,'2010-03-10 15:26:29','P',0,'Why not using single .gitignore in the project\'s root? Any reason for duplicating same lines for every project?',NULL,103,2,'.gitignore','AAAABH///90='),(8,1,'2010-03-10 05:19:08','P',1,'The added copyright statement made the file too dissimilar from its source so git decided it wasn\'t a rename.','AAAABH///9E=',103,2,'org.eclipse.jgit.pgm/jgit.sh','AAAABH///7k='),(8,11,'2010-03-10 05:19:08','P',1,'Why this was recorded as delete/add and not a move?',NULL,103,2,'org.eclipse.jgit.pgm/jgit.sh','AAAABH///9E='),(79,1,'2010-03-10 05:19:08','P',1,'Good point.  I\'ll send another patch shortly to use this URL.','AAAABH///9I=',103,2,'pom.xml','AAAABH///7g='),(79,11,'2010-03-10 05:19:08','P',1,'What about using more specific URL like https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced;component=JGit;product=EGit;classification=Technology ?',NULL,103,2,'pom.xml','AAAABH///9I='),(108,1,'2009-12-01 01:07:16','P',1,'These should go through Activator.logError so they are recorded inside of the workbench\'s Error Log view.',NULL,108,2,'org.eclipse.egit.core/src/org/eclipse/egit/core/project/GitProjectData.java','AAAABX///+E='),(88,1,'2009-12-01 01:07:16','P',1,'Given how deeply nested this is, I wonder if the better way to open the method is to just say:\n\n  if (delta == null\n   || delta.getKind != IResourceDelta.CHANGED\n   || (delta.getFlags() & IResourceDelta.OPEN) == 0)\n    return;\n\nas it removes two levels of indentation.  Though the negated logic may seem strange to some readers.',NULL,108,2,'org.eclipse.egit.core/src/org/eclipse/egit/core/project/GitProjectData.java','AAAABX///+I='),(86,1,'2009-12-01 01:07:16','P',1,'Don\'t you mean:\n\n  && (delta.getFlags() & IResourceDelta.OPEN) != 0\n\nhere?  If I understand the Javadoc of getFlags() correctly we would want to verify the OPEN bit was set.',NULL,108,2,'org.eclipse.egit.core/src/org/eclipse/egit/core/project/GitProjectData.java','AAAABX///+M='),(36,6,'2009-11-26 14:07:59','P',1,'I doubt that this is what a user expects. I would expect that a dialog opens where I can choose a revision to compare with.',NULL,112,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CompareWithRevisionAction.java','AAAABH///5Y='),(254,6,'2009-11-26 14:07:59','P',1,'I would suggest to show here the short message of the commit like in the History View (in class CommitMessageViewer) using element.getComment(). This would be more consistent and be more relevant for the user.',NULL,112,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/GitCompareFileRevisionEditorInput.java','AAAABH///5c='),(344,6,'2009-11-26 14:07:59','P',1,'This leads to a ClassCastException if resource is a Folder or a Project. Better check this before; in this case we do not show a diff of course.',NULL,112,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java','AAAABH///5Q='),(332,6,'2009-11-26 14:07:59','P',1,'Unsafe cast: The return value could be a ResourceList!',NULL,112,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java','AAAABH///5U='),(262,4,'2010-03-10 05:19:08','P',1,'How about DEFAULT_REMOTE_NAME instead of REMOTE in order to be more explicit ? That\'s how the corresponding constant in EGit was named (see your other patch).',NULL,113,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java','AAAABH///5A='),(497,1,'2009-12-01 00:53:54','P',1,'Use .equals()',NULL,114,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java','AAAABX///+0='),(290,1,'2010-03-10 05:19:08','P',1,'I think we should also test a couple more cases:\n\n* /a/b/c.git  --> \"c\"\n* /abc  --> \"abc\"\n* /a/b/c  --> \"c\"\n* /abc/.git  --> \"abc\"',NULL,115,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java','AAAABX///5k='),(373,1,'2010-03-10 05:19:08','P',1,'Why isn\'t this just an instance method of URIish, calling getPath() itself internally?\n\nAlso, I wonder if \"getBaseName()\" or \"getName()\" isn\'t more suitable as a name for this method.  The former mirrors with the UNIX basename utility, while the latter mirrors more with java.io.File or IResource API.',NULL,115,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX////c='),(370,1,'2010-03-10 05:19:08','P',1,'I\'d like to see a bit more detailed Javadoc of this method.  Can you list example input URIs, and their outputs?',NULL,115,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX////g='),(373,8,'2010-03-10 05:19:08','P',1,'getDisplayName() seems to be a common name for getting strings suitable for UI purposes','AAAABX////c=',115,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///48='),(374,1,'2010-03-10 05:19:08','P',1,'Style-nit: curly braces aren\'t used when there\'s only one statement nested inside of the if.',NULL,115,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///4c='),(381,1,'2010-03-10 05:19:08','P',1,'Isn\'t this NON-NLS-1 tag unnecessary given that DOT_GIT is now a string constant?',NULL,115,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///4g='),(386,1,'2010-03-10 05:19:08','P',1,'Yea, we probably should throw IAE if the return string would be empty here.  We do it for most of the other conditions where the input string looks too wrong to continue processing, e.g. above you throw IAE if the input string was \"\".','AAAABX///5E=',115,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///4U='),(375,1,'2010-03-10 05:19:08','P',1,'Should we include a message like \"empty path\"?',NULL,115,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///4Y='),(386,11,'2010-03-10 05:19:08','P',1,'I think we should never return an empty \'humanish\' name. Would it be reasonable to throw an IllegalArgumentException when the value to return is empty?',NULL,115,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///5E='),(373,1,'2010-03-10 05:19:08','P',1,'OK,  I understand now why you want getHumanishName to be static and accept a string.  I still think the instance method form would also be useful because most uses of it will have a URIish instance object on hand that they want the humanish name off of.\n\nRegarding the name of the method, I guess we can keep it getHumanishName.  After thinking about the other suggestions I gave, they are perhaps worse than getHumanishName when it comes to describing their intended result.','AAAABX///8A=',115,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///5o='),(373,11,'2010-03-10 05:19:08','P',1,'@instance method: I think there are cases when you want just a \'humanish\' name from the plain string without the need to create an instance of URIish and running through the validation. May be even for an invalid URI, you are interested in a \'humanish\' name only and don\'t care about anything else.\n\n@method\'s name: what about the path of least resistance? ;-) There are three contexts when you may want a \'humanish\' name: git, UNIX and java.io.File/IResource API. -1 for UNIX as it requires some specific \'knowledge\' about it, +1 for Git (\'humanish\' is a domain-specific to Git and should be known for a developer), +1 for java.io.File/IResource API (you are trying to work with the underlying filesystem and should be familiar with domain\'s specifics).','AAAABX////c=',115,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///8A='),(315,1,'2010-03-10 05:19:08','P',1,'What about the strange case of /abc//.git ?',NULL,115,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java','AAAABX///38='),(420,8,'2010-03-10 05:19:08','P',1,'Could we have a more humanish name for this? like getDisplayNameI(). \n\nThe reason I used the -ish in this class is becuase it is like an URI, but not quite. The -ish means \"like\" in Git context. \n\nThe name returned from this method is not like a \"human\". It is not a human at all.',NULL,115,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///30='),(420,11,'2010-03-10 05:19:08','P',1,':-) No, it\'s from the \'man git-clone\', the directory option: The \"humanish\" part of the source repository is used if no directory is explicitly given (repo for /path/to/repo.git and foo for host.xz:foo/.git).','AAAABX///30=',115,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///3g='),(9,8,'2010-03-10 05:19:08','P',1,'We don\'t have any official recommendations here, buit so far we have not\nlisted copyright holders like this:\n\nThe header would be pretty crowded and unreadable. Just add your name to\nthe list like the rest. \n\nWe use blame and history for figuring out what you did.',NULL,115,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///3s='),(403,8,'2010-03-10 05:19:08','P',1,'What happens when you pass D:\\x\\x.git here?\n\nYou bypass the URIish parsing completely and miss all logic encoded in this class. By using the constructor logic you could make sure this method\nis consistent with the rest or the class.\n\nDoing so would mean you could do with fewer tests since all the illegall formats have already been taken care of.',NULL,115,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///3w='),(410,1,'2010-03-10 05:19:08','P',1,'Isn\'t this case only relevant if lastSegment equals \".git\" ?\n\nCould we write this instead as:\n\n  String result = elements[elements.length - 1];\n  if (DOT_GIT.equals(result))\n    result = elements[elements.length - 2];\n  else if (result.endsWith(DOT_GIT))\n    result = result.substring(0, result.length() - DOT_GIT.length());\n  return result;\n\nas it shouldn\'t be possible for result to be an empty string at this point?',NULL,115,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///4A='),(409,1,'2010-03-10 05:19:08','P',1,'Style-nit: Be consistent with yourself, elsewhere in the same method you use \"\".equals(result) instead.',NULL,115,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///4E='),(395,1,'2010-03-10 05:19:08','P',1,'Can you elaborate on the conditions which cause the method to fail?',NULL,115,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///4I='),(393,1,'2010-03-10 05:19:08','P',1,'Style-nit: Use {@code null} instead and then the . ending the sentence won\'t line wrap onto the next line by itself.',NULL,115,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///4M='),(410,11,'2010-03-10 05:19:08','P',1,'It seems to me we shouldn\'t return an empty value because it\'s not a name if it\'s empty.\n\nHowever I\'m not sure which solution would be the best: a) always using a try/catch block (even if an empty value is absolutely OK for some case) or b) just use \"\".equals(getHumanishName()) if an empty string isn\'t suitable in a particular case.\n\nAnother question is should we behave in this case in an exactly same way as a C implementation does.','AAAABX///2k=',115,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///0Y='),(410,8,'2010-03-10 05:19:08','P',1,'So we allow cloning /.git but cannot get the humanish name of it?\n\nC Git allows this\n$ git clone /.git\nInitialized empty Git repository in /home/me/tmp/.git/.git/\n\nShouldn\'t we return \"\" then?\n\nTried some other combinations with C git that \"workded\", but made no sense.','AAAABX///2s=',115,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///2k='),(410,11,'2010-03-10 05:19:08','P',1,'We need this check because org.eclipse.jgit.transport.URIish.URIish(String) accepts these URIs and we\'ll return an empty string:\n\n- \"git://\" + \".git\"\n- \"/.git\"\n- \"//.git\"\n- \"git://\" + \"/abc//.git\"',NULL,115,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java','AAAABX///2s='),(4,1,'2009-12-01 00:52:36','P',1,'I wonder if we shouldn\'t also be including our two Orbit based dependencies of args4j and jsch when we define this project set for egit/jgit ?',NULL,118,1,'egit.psf','AAAABX////4='),(4,11,'2009-12-01 07:53:12','P',1,'My original intent was to define/show/discuss the project reference\'s format (i.e, do we need a version here like CVS does \'1.0|git://...\', single branch per repo VS individual branch per project and so on).\n\nAs of args4j and jsch: may be the better way here would be a target platform definition?','AAAABX////4=',118,1,'egit.psf','AAAABX///8Y='),(114,11,'2010-03-30 21:04:11','d',1,'Done','AAAABX////k=',118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAAAn////U='),(101,11,'2010-03-30 20:11:55','d',1,'Done','AAAABX////s=',118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAAAn////Y='),(80,1,'2009-12-01 00:52:36','P',1,'The --origin option comment makes no sense in this context.  We don\'t use this string within the project reference in the project set, but I expected you to be using it given your comment right here.\n\nAlso, we\'re probably OK to just hardcode this as \"origin\" via the DEFAULT_REMOTE_NAME constant.  Users aren\'t likely to change it.  IMHO project set files are about simplifying getting started with a project in Eclipse.  We should help that by also setting some basic standard rules, like the name of the default remote that the project set created.',NULL,118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX////A='),(73,1,'2009-12-01 00:52:36','P',1,'The --branch option comment makes no sense in this context.  We don\'t use this string within the project reference in the project set, but I expected you to be using it given your comment right here.',NULL,118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX////E='),(131,1,'2009-12-01 00:52:36','P',1,'Shouldn\'t DEFAULT_BRANCH here be the branch field from the ProjectReference class?\n\nOf course you could have the case where a project set has 2 or more projects from the same repository, but they are pointing at different branches.  IMHO this is an invalid project set for the EGit puglin, and we should reject it.',NULL,118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX////I='),(114,1,'2009-12-01 00:52:36','P',1,'Shouldn\'t we do this only once during the projectsInRepository == null condition two lines above?',NULL,118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX////k='),(55,1,'2009-12-01 00:52:36','P',1,'Why can\'t this be private?',NULL,118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX////o='),(101,1,'2009-12-01 00:52:36','P',1,'I don\'t think you need UrrishComparator here.  URIish implements hashCode and equals contract correctly for HashMap.',NULL,118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX////s='),(80,8,'2009-12-18 23:32:09','P',1,'Yes, adding a new remote using the team project set makes sense to me. I don\'t know if it works. Another thing is that you may want to use another name for the remote master branch, like the ones i import from clearcase where the master branch is called main and I think it makes more sense to keep that name,','AAAABX///8E=',118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX///40='),(131,8,'2009-12-18 23:32:09','P',1,'Just throw an exception. Such a team project set should not be possible to\ncreate using EGit so it\'s simply an example of a corrupt psf file.\n\nThis should happen at an early stage, so the user gets feedback in the import dialog.','AAAABX///8U=',118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX///4w='),(80,8,'2009-12-01 17:44:52','P',1,'Any general discussions are better tracked using mail. Interesting topic though so please post to the mailing list.','AAAABX///8E=',118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX///70='),(80,11,'2009-12-01 08:59:49','P',1,'What about a (more generic) use case: for instance, I\'ve checked out some project\'s fork from GitHub and now I\'m trying to check out its original codebase from org.eclipse using a provided PSF. Dealing with two different local repositories of the same codebase in this case seems to me unhandy.\n\nWould it be better try to add a new origin to the existing local repo and fetch from the repository specified in a PSF?','AAAABX////A=',118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX///8E='),(55,11,'2009-12-01 08:59:49','P',1,'...due to \'origin field is never read locally\' error. See next comment.','AAAABX////o=',118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX///8I='),(101,11,'2009-12-01 08:22:48','P',1,'It\'s just a leftover from an original implementation which was TreeSet-based.','AAAABX////s=',118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX///8M='),(131,11,'2009-12-01 07:53:12','P',1,'I\'m not sure how this should be handled and waiting for any feedback,  http://wiki.eclipse.org/EGit/User_Guide/Project_Set_File#Same_branch_VS_individual_branches','AAAABX////I=',118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAABX///8U='),(18,11,'2010-03-30 20:08:17','d',1,'Done','AAAABX////w=',118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProviderType.java','AAAAAn////c='),(15,11,'2010-03-30 20:08:15','d',1,'Done','AAAABX////0=',118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProviderType.java','AAAAAn////g='),(15,1,'2009-12-01 00:52:36','P',1,'We don\'t do @author tags.',NULL,118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProviderType.java','AAAABX////0='),(18,1,'2009-12-01 00:52:36','P',1,'Style-nit: We prefer \"public final class\" round here.',NULL,118,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProviderType.java','AAAABX////w='),(4,11,'2010-03-30 19:59:11','d',1,'Done','AAAAC3///8E=',118,2,'egit.psf','AAAAAn////s='),(4,8,'2009-12-29 11:36:38','P',1,'This one needs updating to the latest projects and URLs',NULL,118,2,'egit.psf','AAAAC3///8E='),(11,11,'2010-07-09 22:19:30','d',1,'- https://bugs.eclipse.org/bugs/show_bug.cgi?id=244313 affects PSF import too.\n- making this an optional dependency not a solution: ImportProjectSetOperation fails silently without a compatibility layer, providing no feedback to user and causes him to guess what happend. Not the best way.\n- however, mandating compatibility layer for EGit globally not a good solution too.\n\nThe only way to implement this feature while not mandating a compatibility layer is to move PSF support into a feature patch/separate feature.','AAAAD3///7s=',118,2,'org.eclipse.egit.core/META-INF/MANIFEST.MF','AAAAAn////o='),(11,3,'2010-01-06 13:53:14','P',1,'We shouldn\'t need this, and especially shouldn\'t mandate it. We can make it an optional dependency, using ;resolution:=optional on the line. Ideally this bug should be fixed upstream such that we don\'t need it, but I see no reason to demand it and prevent everything else from working if it\'s not present.',NULL,118,2,'org.eclipse.egit.core/META-INF/MANIFEST.MF','AAAAD3///7s='),(113,8,'2009-12-29 11:36:38','P',1,'Either add a message or check that at least some errors here make sense and drop This comment (next TODO too)',NULL,118,2,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAAC3///8I='),(170,8,'2009-12-29 11:36:38','P',1,'drop TODO comment',NULL,118,2,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAAC3///8M='),(145,8,'2009-12-29 11:36:38','P',1,'We have not abandoned 3.4 just yet. makeRelativePath requires 3,5.',NULL,118,2,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAAAC3///8Q='),(113,11,'2010-07-09 13:37:27','d',1,'Done','AAAAC3///8I=',118,2,'org.eclipse.egit.core/src/org/eclipse/egit/core/GitProjectSetCapability.java','AAALwX//+5E='),(112,8,'2009-12-07 11:26:33','P',1,'The eclipse plugin editor does these things.','AAAABX///6c=',121,2,'org.eclipse.egit.ui/plugin.xml','AAAABX///4k='),(112,1,'2009-12-03 16:13:51','P',1,'What\'s going on here, bad indentation on this element?  Can we avoid changing it while adding new functionality?  I\'d prefer to have pure whitespace fix patches be isolated.',NULL,121,2,'org.eclipse.egit.ui/plugin.xml','AAAABX///6c='),(121,1,'2009-12-03 16:13:51','P',1,'Should be translated through a property.\n\nAlso, shouldn\'t we have a tooltip?',NULL,121,2,'org.eclipse.egit.ui/plugin.xml','AAAABX///6g='),(344,6,'2009-12-03 16:27:57','P',1,'This leads to a ClassCastException if resource is a Folder or a Project. Better check this before; in this case we do not show a diff of course.',NULL,122,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java','AAAABX///6U='),(332,6,'2009-12-03 16:27:57','P',1,'Unsafe cast: The return value could be a ResourceList!',NULL,122,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java','AAAABX///6Y='),(232,8,'2009-12-30 00:50:22','P',1,'TableView_er_',NULL,122,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitGraphTable.java','AAAADX////s='),(401,8,'2009-12-30 00:50:22','P',1,'This doesn\'t fly with Eclipse 3.4',NULL,122,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java','AAAADX////o='),(45,1,'2010-03-10 05:19:08','P',1,'Missing EDL copyright header.',NULL,125,2,'org.eclipse.jgit-feature/pom.xml','AAAABX///5Y='),(300,1,'2010-03-10 05:19:08','P',1,'Unnecessary trailing whitespace.',NULL,125,2,'pom.xml','AAAABX///5c='),(58,11,'2010-03-10 05:19:08','P',1,'What about providing a human-readable name for this feature? It\'s unnamed now:\n\n[INFO] Unnamed - org.eclipse.jgit:org.eclipse.jgit-feature:eclipse-feature:0.6.0-SNAPSHOT  SUCCESS [1.338s]',NULL,125,3,'org.eclipse.jgit-feature/pom.xml','AAAABX///1s='),(271,4,'2010-03-10 05:19:08','P',1,'I would expect that this environment variable points to an alternate index file.',NULL,132,2,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java','AAAABX///1w='),(157,1,'2010-03-10 05:19:08','P',1,'Shouldn\'t this be File ?',NULL,132,3,'org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java','AAAACX////s='),(23,4,'2009-12-11 11:39:42','P',1,'JUnit 3 apparently doesn\'t like this change, it doesn\'t find the test cases anymore if they are not directly extending junit.framework.TestCase. This leads for all tests to the exception:\n\njunit.framework.AssertionFailedError: No tests found in org.eclipse.egit.core.T0003_AdaptableFileTreeIteratorTest\n	at junit.framework.Assert.fail(Assert.java:47)\n	at junit.framework.TestSuite$1.runTest(TestSuite.java:90)\n...',NULL,133,2,'org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/GitTestCase.java','AAAABX///zw='),(60,4,'2009-12-20 21:34:54','P',0,'if this is no longer called (see above) why do we need to retain this method ?',NULL,133,3,'org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/GitTestCase.java','AAAACH////M='),(38,4,'2009-12-20 21:34:54','P',1,'this renders the next line dead code and will always skip this check',NULL,133,3,'org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/GitTestCase.java','AAAACH////Q='),(1,4,'2010-03-10 15:26:29','P',1,'this project has no java nature -> no need to ignore /bin\n\ninstead we should ignore compile.org.eclipse.jgit.xml which is generated on \"Export / Deployable Features\"',NULL,136,2,'org.eclipse.jgit-feature/.gitignore','AAAABX///z4='),(9,11,'2009-12-11 12:43:51','P',1,'The same net.sf.swtbot vs o.e.swtbot:\n\ndiff --git a/org.eclipse.egit.ui.test/META-INF/MANIFEST.MF b/org.eclipse.egit.ui.test/META-INF/MANIFEST.MF\nindex e3554e4..2670d4c 100644\n--- a/org.eclipse.egit.ui.test/META-INF/MANIFEST.MF\n+++ b/org.eclipse.egit.ui.test/META-INF/MANIFEST.MF\n@@ -6,14 +6,15 @@ Bundle-Version: 0.6.0.qualifier\n Bundle-Activator: org.eclipse.egit.ui.test.Activator\n Require-Bundle: org.eclipse.core.runtime,\n  org.eclipse.egit.ui;bundle-version=\"0.6.0\",\n- net.sf.swtbot.eclipse.finder;bundle-version=\"2.0.0\",\n- net.sf.swtbot.eclipse.spy;bundle-version=\"2.0.0\",\n- net.sf.swtbot.eclipse.ui;bundle-version=\"2.0.0\",\n- net.sf.swtbot.finder;bundle-version=\"2.0.0\",\n+ org.eclipse.swtbot.eclipse.finder;bundle-version=\"2.0.0\",\n+ org.eclipse.swtbot.eclipse.spy;bundle-version=\"2.0.0\",\n+ org.eclipse.swtbot.eclipse.ui;bundle-version=\"2.0.0\",\n+ org.eclipse.swtbot.swt.finder;bundle-version=\"2.0.0\",\n  org.eclipse.swt;bundle-version=\"3.4.0\",\n  org.eclipse.ui;bundle-version=\"3.4.0\",\n  org.eclipse.core.resources;bundle-version=\"3.4.0\",\n  org.eclipse.jgit;bundle-version=\"0.6.0\",\n- org.apache.log4j;bundle-version=\"1.2.13\"\n+ org.apache.log4j;bundle-version=\"1.2.13\",\n+ org.hamcrest;bundle-version=\"1.1.0\"\n Bundle-ActivationPolicy: lazy\n Bundle-RequiredExecutionEnvironment: J2SE-1.5',NULL,137,1,'org.eclipse.egit.ui.test/META-INF/MANIFEST.MF','AAAABX///zc='),(6,8,'2010-01-08 21:59:19','P',1,'The activator is something I got from a tutorial on unit testing Eclipse plugins. Maybe that\'s obsolete now?','AAAAD3///ww=',137,1,'org.eclipse.egit.ui.test/META-INF/MANIFEST.MF','AAAAD3///wc='),(6,11,'2010-01-08 20:06:57','P',1,'Do we really need an activator?',NULL,137,1,'org.eclipse.egit.ui.test/META-INF/MANIFEST.MF','AAAAD3///ww='),(28,11,'2010-01-08 20:06:57','P',1,'IIRC there are some issues when JUnit3 and JUnit4 bundles available in the same time. See http://wiki.eclipse.org/Eclipse/Testing/JUnit4_Changes#Moving_to_JUnit4 for more info on migrating to JUnit4.','AAAAD3///xc=',137,1,'org.eclipse.egit.ui.test/org.eclipse.egit.ui--All tests.launch','AAAAD3///w4='),(28,8,'2010-01-08 15:59:44','P',1,'Probably sine you switched to another swtbot','AAAAD3///yA=',137,1,'org.eclipse.egit.ui.test/org.eclipse.egit.ui--All tests.launch','AAAAD3///xc='),(28,4,'2010-01-08 15:00:54','P',1,'I had to switch to JUnit 4 and annotate classes otherwise SWTBot doesn\'t find the test cases (probably because JUnit 3 only find tests which directly inherit from TestCase)',NULL,137,1,'org.eclipse.egit.ui.test/org.eclipse.egit.ui--All tests.launch','AAAAD3///yA='),(40,4,'2010-01-08 15:00:54','P',1,'according to SWTBot documentation [1] tests should not run in UI thread hence add:\n\n<booleanAttribute key=\"run_in_ui_thread\" value=\"false\"/>\n\nIn order to make it work on German system I had to pass US keyboard layout as VM parameter, in order to play with timing parameters I added the other 2 parameters :\n\n<stringAttribute key=\"org.eclipse.jdt.launching.VM_ARGUMENTS\" value=\"-Dorg.eclipse.swtbot.playback.poll.delay=500 -Dorg.eclipse.swtbot.playback.delay=0 -Dorg.eclipse.swtbot.keyboard.layout=EN_US\"/>\n\n[1] http://wiki.eclipse.org/SWTBot/FAQ#Why_do_tests_run_on_a_non-UI_thread.3F',NULL,137,1,'org.eclipse.egit.ui.test/org.eclipse.egit.ui--All tests.launch','AAAAD3///yE='),(7,11,'2009-12-11 12:43:51','P',1,'Why net.sf.swtbot was used and not org.eclipse.swtbot.*?\n\n--- INDEX:/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java\n+++ WORKDIR:/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java\n@@ -4,14 +4,13 @@\n import java.io.FileOutputStream;\n import java.io.IOException;\n \n-import net.sf.swtbot.eclipse.finder.SWTBotEclipseTestCase;\n-import net.sf.swtbot.wait.Conditions;\n-import net.sf.swtbot.widgets.SWTBotShell;\n-import net.sf.swtbot.widgets.SWTBotTree;\n-\n import org.eclipse.core.resources.ResourcesPlugin;\n import org.eclipse.core.runtime.Platform;\n import org.eclipse.jgit.lib.Repository;\n+import org.eclipse.swtbot.eclipse.finder.SWTBotEclipseTestCase;\n+import org.eclipse.swtbot.swt.finder.waits.Conditions;\n+import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;\n+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;',NULL,137,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAABX///zg='),(28,11,'2009-12-11 12:43:51','P',1,'The same issue as in http://egit.eclipse.org/r/133:\n\norg.eclipse.egit.ui--All tests\norg.eclipse.egit.ui.internal.sharing.GitCloneWizardTest\nwarning(junit.framework.TestSuite$1)\njunit.framework.AssertionFailedError: No tests found in org.eclipse.egit.ui.internal.sharing.GitCloneWizardTest\n	at junit.framework.Assert.fail(Assert.java:47)\n	at junit.framework.TestSuite$1.runTest(TestSuite.java:90)\n	at junit.framework.TestCase.runBare(TestCase.java:130)\n	at junit.framework.TestResult$1.protect(TestResult.java:106)',NULL,137,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAABX///zk='),(436,8,'2010-01-09 23:01:59','P',1,'No popup here. I wonder what is going on.\nThis timeout takes a long time on my machine.','AAAAD3///wM=',137,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAAD3///v0='),(231,8,'2010-01-09 23:01:59','P',1,'A difference between SWTBot or Eclipse versions','AAAAD3///wU=',137,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAAD3///v4='),(405,8,'2010-01-09 23:01:59','P',1,'The behaviour here is also to switch to the branch page, which is disabled until the error occurs after about five minutes (something I\'d like to shorten somhoew).','AAAAD3///wQ=',137,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAAD3///vw='),(436,4,'2010-01-09 00:18:59','P',1,'EGit behaves differently than this test expects, when timeout is reached it doesn\'t display the error on the wizard page but raises an extra error popup saying\n\nTransport error  Reason: \ngit://www.example.com/EGIT: connection timeout: connect\n\nhence this assert fails consistently.',NULL,137,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAAD3///wM='),(405,4,'2010-01-09 00:18:59','P',1,'Here EGit behaves differently than this test expects, instead of displaying the expected error message it proceeds to the next wizard page (\"Select branches to clone from remote repository.\").\n\nmsysgit CLI behaves similarily when trying to clone from this URL, it initializes an empty repository and then hangs forever.',NULL,137,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAAD3///wQ='),(231,4,'2010-01-09 00:18:59','P',1,'Here I had to add\n    \n  bot.textWithLabel(\"URI:\").pressShortcut(Keystrokes.END);\n\nin order to append the X at the end of the URI',NULL,137,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAAD3///wU='),(28,4,'2010-01-08 15:00:54','P',1,'I prepended \n\n@RunWith(SWTBotJunit4ClassRunner.class)\n\nto make this run under JUnit 4',NULL,137,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAAD3///x0='),(49,4,'2010-01-08 15:00:54','P',1,'the section until this line is repeated in all test cases it should better be factored out into a helper method',NULL,137,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAAD3///x4='),(40,4,'2010-01-08 15:00:54','P',1,'I had to prepend \n\nbot.perspectiveByLabel(\"Java\").activate();\n\nin order to switch to Java perspective otherwise package explorer isn\'t found\n\nview() is deprecated hence better use \n\nbot.viewByTitle(\"Package Explorer\").show();',NULL,137,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAAD3///x8='),(39,4,'2010-01-08 15:00:54','P',1,'annotate with @Test\nto mark it as a JUnit 4 test, same for all other tests',NULL,137,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAAD3///xw='),(148,38,'2010-01-10 20:43:32','P',1,'Here\'s what\'s happening:\n\nAll operations in swtbot are async.\n\nWhich means that the clicks on the Next button (above) has still not changed the page. when this line is executed. As a result swtbot finds the table on the previous page. This table has 0 rows, as a result the uncheck does not happen and the assert after this loop fails.',NULL,137,3,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/internal/sharing/GitCloneWizardTest.java','AAAAD3///s0='),(63,1,'2010-03-10 05:19:08','P',1,'Since this class provides only static methods, provide a private constructor so instances cannot be created, and the class cannot be subclassed.',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeAlgorithm.java','AAAACX///+Q='),(57,1,'2010-03-10 05:19:08','P',1,'This part in parens isn\'t relevant to the docs, I\'d drop it.',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeAlgorithm.java','AAAACX///+U='),(61,1,'2010-03-10 05:19:08','P',1,'Strike this todo remark.\n\nIf you are still looking for a better name, \"ContentMerger\" ?',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeAlgorithm.java','AAAACX///+Y='),(76,1,'2010-03-10 05:19:08','P',1,'Since these are immutable, mark them final so its clear to everyone they can\'t change once a MergeChunk has been created.',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeChunk.java','AAAACX////I='),(103,1,'2010-03-10 05:19:08','P',1,'Style-nit:  We don\'t call super if there are no arguments to it.',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeChunk.java','AAAACX////M='),(136,1,'2010-03-10 05:19:08','P',1,'Style-nit: spaces around operators.',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAACX///+c='),(59,1,'2010-03-10 05:19:08','P',1,'I think the Javadoc should also clarify that not only are we dealing with RawText objects, but that its a line-oriented file with LF being used as the line delimiters when producing conflict regions.\n\nThis is good enough for most uses, but if someone comes along and wants to do a different merge function, they might be tempted to use this code until they start to discover our hidden LF assumptions.  We should be a bit more clear about that up front in the docs.',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAACX///+g='),(85,1,'2010-03-10 05:19:08','P',1,'I don\'t think we should assume the host character encoding here.  We should probably get the character encoding passed in to us.  We might be able to figure it out by looking at the input sequences and guessing, or by looking at a .gitattributes file.',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAACX///+k='),(79,1,'2010-03-10 05:19:08','P',1,'Statement has no effect.',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAACX///+o='),(77,1,'2010-03-10 05:19:08','P',1,'style-nit: we prefer spaces around operators.',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAACX///+s='),(103,1,'2010-03-10 05:19:08','P',1,'typo on \"the a\"',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeResult.java','AAAACX////A='),(92,1,'2010-03-10 05:19:08','P',1,'typo on \"thex\" ?',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeResult.java','AAAACX////E='),(166,1,'2010-03-10 05:19:08','P',1,'typo on \"his\" (should be this).',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeResult.java','AAAACX///+0='),(164,1,'2010-03-10 05:19:08','P',1,'typo on \"at least on\" (should be one).',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeResult.java','AAAACX///+4='),(79,1,'2010-03-10 05:19:08','P',1,'I think we should clarify that the list is used as-is and thus should be immutable so the MergeResult doesn\'t suddenly modify due to the caller changing the list and reusing it for some other purpose after making the MergeResult.',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeResult.java','AAAACX///+8='),(140,1,'2010-03-10 05:19:08','P',1,'This worries me about being brittle with regards to the ordering of the enums inside of the enum declaration.  If they ever moved around, this switch might start reporting strange results.\n\nI wonder if this wouldn\'t be better:\n\n  private static final ConflictState[] states = ConflictState.values();\n\n  state = states[chunks.get(idx++)];\n\nMy only concern is would it be faster or slower than the switch.  I suspect it would be slower, but have nothing to back up that hunch.  :)',NULL,140,2,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeResult.java','AAAACX///+w='),(102,8,'2010-03-10 05:19:08','P',1,'defaultcharset warning. See merge utility.\nHaving both utility methods together looks nicer',NULL,140,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java','AAAADn////A='),(130,8,'2010-03-10 05:19:08','P',1,'Make this a javadoc comment',NULL,140,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java','AAAADn////c='),(162,8,'2010-03-10 05:19:08','P',1,'Should we ever use defaultcharset? It makes no practical difference for this case, but could set a bad example.',NULL,140,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java','AAAADn////E='),(123,8,'2010-03-10 05:19:08','P',1,'Make this a javadoc comment',NULL,140,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java','AAAADn////g='),(114,8,'2010-03-10 05:19:08','P',1,'Make this a javadoc comment',NULL,140,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java','AAAADn////k='),(159,8,'2010-03-10 05:19:08','P',1,'nitpick: private',NULL,140,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java','AAAADn////M='),(106,8,'2010-03-10 05:19:08','P',1,'Make this a javadoc comment',NULL,140,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java','AAAADn////o='),(154,8,'2010-03-10 05:19:08','P',1,'Make this a javadoc comment',NULL,140,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java','AAAADn////Q='),(148,8,'2010-03-10 05:19:08','P',1,'Make this a javadoc comment',NULL,140,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java','AAAADn////U='),(137,8,'2010-03-10 05:19:08','P',1,'Make this a javadoc comment',NULL,140,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java','AAAADn////Y='),(139,8,'2010-03-10 05:19:08','P',1,'spelling error',NULL,140,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java','AAAADn///+4='),(64,8,'2010-03-10 05:19:08','P',1,'This only prevents instantiation: Add final to the class to prevent subclaasing. Some people subclass utility classes even though it rarely is a good idea.\n\nI didn\'t find anything in the coding guidelines abou this...',NULL,140,3,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeAlgorithm.java','AAAADn///+0='),(75,8,'2010-03-10 05:19:08','P',1,'Here, and in general. Start complete sentences with a capital letter',NULL,140,3,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeAlgorithm.java','AAAADn///+8='),(147,8,'2010-03-10 05:19:08','P',1,'character set\nmeta data is the right spelling in natural text. I think.',NULL,140,3,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAADn///+c='),(134,8,'2010-03-10 05:19:08','P',1,'>the caller< to...',NULL,140,3,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAADn///+g='),(132,8,'2010-03-10 05:19:08','P',1,'conformant?\nGit',NULL,140,3,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAADn///+k='),(137,8,'2010-03-10 05:19:08','P',1,'Either \"OutputStream\" or \"output stream\"',NULL,140,3,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAADn///+o='),(112,8,'2010-03-10 05:19:08','P',1,'Reflow this paragraph. You would be better off using /* */ for multi line comments.',NULL,140,3,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAADn///+s='),(120,8,'2010-03-10 05:19:08','P',1,'Avoid magic constants. Either define an LF contant or use \'\\n\' which is less magic.\n\nWhether to always use LF is another topic, but I think we can accept it for the time being.',NULL,140,3,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAADn///+w='),(156,8,'2010-03-10 05:19:08','P',1,'Duplicate comment, Keep @return only',NULL,140,3,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeResult.java','AAAADn///+Q='),(127,8,'2010-03-10 05:19:08','P',1,'Seems private to the iterator below only',NULL,140,3,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeResult.java','AAAADn///+U='),(62,8,'2010-03-10 05:19:08','P',1,'<p> for separating paragraphs',NULL,140,3,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeResult.java','AAAADn///+Y='),(57,1,'2010-03-10 05:19:08','P',1,'FYI, typo here on \"are are\"',NULL,140,5,'org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java','AAAAD3////E='),(62,1,'2010-03-10 05:19:08','P',1,'You dropped off here, what does \"...\" mean?',NULL,140,5,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAAD3////A='),(63,1,'2010-03-10 05:19:08','P',1,'Awkward sentence.',NULL,140,5,'org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java','AAAAD3///+8='),(99,5,'2009-12-16 10:26:42','P',1,'do you take care about NoSuchElement Exceptions? Previous code did',NULL,141,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/sharing/ExistingOrNewPage.java','AAAABn////k='),(105,4,'2009-12-16 13:26:06','d',1,'Yes: if a .git folder exists in the project root this implies at least one repository mapping','AAAABn////U=',141,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/sharing/ExistingOrNewPage.java','AAAABn////M='),(105,5,'2009-12-16 12:23:50','P',1,'if m==null && gitDirInProjectRoot.isDirectory()==true then we could get here and the next call will lead to NPE.\n\nAre you sure that this cannot happen?',NULL,141,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/sharing/ExistingOrNewPage.java','AAAABn////U='),(97,4,'2009-12-17 22:17:11','P',1,'I think this warning could be more precisely point to the reason why commit is not possible:\n\n\"No changed items were selected and no commit exists hence neither commit nor amend are possible.\"',NULL,142,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CommitAction.java','AAAAB3////U='),(210,4,'2010-03-10 05:19:08','P',1,'style-nit: your indentation is inconsistent with the rest of this source file',NULL,143,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java','AAAAB3////0='),(211,8,'2010-03-10 05:19:08','P',1,'Use SystemReader.getInstance().getProperty(). This advice also means you should not readyy declare this as a constant and not here.\n\nSee also http://egit.eclipse.org/r/#change,145',NULL,143,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java','AAAAB3///+0='),(83,4,'2010-03-10 05:19:08','P',1,'how to handle IllegalCharsetNameException and UnsupportedCharsetException which may occur here ?',NULL,143,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java','AAAAB3////o='),(72,4,'2010-03-10 05:19:08','P',1,'style-nit: inconsistent indentation',NULL,143,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java','AAAAB3////w='),(83,30,'2010-03-10 05:19:08','d',1,'I can suggest two ways here:\n1. Fallback to the system default encoding.\n2. Raise RuntimeException, e.g. :66 line is also able to raise an exception under certain circumstances.\n\nI\'d vote for 1. I will prepare a new serie of patches tomorrow.','AAAAB3////o=',143,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java','AAAAB3////Y='),(138,4,'2010-03-10 05:19:08','P',1,'style-nit: inconsistent indentation',NULL,143,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryConfig.java','AAAAB3////s='),(164,1,'2010-03-10 05:19:08','P',1,'Even if HEAD is currently pointing at an annotated tag\'s ref (e.g. HEAD = \"ref: refs/tags/v1.0\" and v1.0 is an annotated tag) peeling here when we prepare the updateRef is wrong.  We want to know what the ref currently points at during the update, which is the tag, not the commit under the tag.','AAAACn///+8=',146,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java','AAAACn///+0='),(186,8,'2010-03-10 05:19:08','P',1,'yep, the intent was to have a one-argument function in Repository, not here.','AAAACX////8=',146,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java','AAAACn///+4='),(164,8,'2010-03-10 05:19:08','P',1,'I was thinking about tags, but maybe that does not make sense...\nFor HEAD it most surely doesn\'t, but this routine allow us to detach any symbolic ref. Through peeling that would work even if the symref refers to a tag.','AAAACX////4=',146,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java','AAAACn///+8='),(164,1,'2010-03-10 05:19:08','P',1,'Why are we peeling the ref if it exists?  Shouldn\'t we be using the exact ObjectId it currently points at and not the peeled identity?',NULL,146,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java','AAAACX////4='),(186,1,'2010-03-10 05:19:08','P',1,'This appears to be unused?',NULL,146,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java','AAAACX////8='),(69,8,'2010-03-10 05:19:08','P',1,'Thiis is the most backward thing I\'ve seen for a long  time, You assert that 20 == 20 which is so obvious I do think we need to check that, lest we port this code to FORTRAN. \n\nAck, for  the comment. Leave the rest or prove we need to \"optimize\" this,',NULL,149,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/AnyObjectId.java','AAAAC3////U='),(478,4,'2010-03-10 05:19:08','P',1,'style nit: I think this comment should be left untouched',NULL,149,7,'org.eclipse.jgit/src/org/eclipse/jgit/lib/AnyObjectId.java','AAAAC3///+s='),(170,1,'2010-03-10 05:19:08','P',1,'Should be OBJECT_ID_STRING_LENGTH.',NULL,149,8,'org.eclipse.jgit/src/org/eclipse/jgit/lib/AbbreviatedObjectId.java','AAAAC3///+c='),(62,1,'2010-03-10 05:19:08','P',1,'Style-nit: We don\'t use <br>, but we instead use \\n<p>\\n to break the line:\n\n  /**\n   * A Git object hash is 160 bits, i.e. 20 bytes.\n   * <p>\n   * Changing that is not going to be as easy as changing this declaration.\n   */',NULL,149,8,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java','AAAAC3///+g='),(1,4,'2010-03-10 15:26:29','P',1,'s/jgit-feature/jgit.feature/',NULL,157,1,'org.eclipse.jgit.feature/.project','AAAACn///+Q='),(57,4,'2010-03-10 05:19:08','P',1,'s/jgit-feature/jgit.feature/',NULL,157,1,'org.eclipse.jgit.feature/pom.xml','AAAACn///+M='),(47,11,'2010-03-10 05:19:08','d',1,'style nit: trailing white space',NULL,158,1,'org.eclipse.jgit.site/pom.xml','AAAACn///+U='),(95,3,'2010-01-06 12:02:16','P',1,'Doesn\'t this just pick the first one, all the time? What if it\'s null?',NULL,162,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/ConnectProviderOperation.java','AAAAD3///8w='),(99,8,'2010-01-30 07:24:03','P',1,'The baseclass contains rmrf(). Use it instead',NULL,165,1,'org.eclipse.egit.core.test/src/org/eclipse/egit/core/op/T0001_ConnectProviderOperationTest.java','AAAAEn////A='),(84,8,'2010-01-30 07:24:03','P',1,'Due to the way Windows works, I\'d rather see us doing something close to what the JGit tests does, which includes delaying the cleanup of temporary directories so the GC has a better change of reclaiming unused file descriptors and memory mappins (if used).\n\nMaybe I should refactor that do avoid a CQ, so you do not need to fix that for this patch.',NULL,165,1,'org.eclipse.egit.core.test/src/org/eclipse/egit/core/op/T0001_ConnectProviderOperationTest.java','AAAAEn///+8='),(1,1,'2009-12-31 03:08:24','P',1,'FYI, I usually prefer to write these as /target, so they aren\'t considered below the top level directory.  When ignoring files in Git I try to be as specific as I can, so we don\'t accidentally ignore a package whose name is \"org.eclipse.egit.ui.target\" or something like that.',NULL,168,2,'org.eclipse.egit-feature/.gitignore','AAAADn////8='),(372,4,'2010-01-07 23:10:52','P',1,'I think we should in addition remove the explanation:\n\"refs/heads/ will be prepended to the name you type\" or move it to the online help since that\'s more an implementation detail than really important to the user, or am I missing something here ?',NULL,172,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAAAD3///zE='),(57,11,'2010-01-08 20:50:26','P',1,'Please introduce a constant for \".git\" part: there are several places where this \'magic string\' used and I see no reason to introduce an another one.',NULL,173,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/sharing/ExistingOrNewPage.java','AAAAD3///wk='),(57,8,'2010-01-13 22:07:11','P',1,'We do that separately in JGit.','AAAAD3///wk=',173,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/sharing/ExistingOrNewPage.java','AAAAEH///7o='),(164,3,'2010-03-10 05:19:08','d',1,'Worth checking this is positive and throwing Illegal Argument Exception if not? What about a tick of 0, would that make sense to catch here?',NULL,176,1,'org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java','AAAAD3///90='),(99,3,'2010-03-10 05:19:08','d',1,'Personally, I\'d in-line constants that are only used once. Understand that the now/tn are needed to be reused, but an/ae aren\'t. However, this is a minor suggestion',NULL,176,1,'org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java','AAAAD3///94='),(176,3,'2010-03-10 05:19:08','d',1,'Do we have a constant for UTF-8 that we can reuse in the JGit libs?',NULL,176,1,'org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java','AAAAD3///9w='),(138,11,'2010-03-10 05:19:08','P',1,'> Good question, but a lot of other Java code takes the style that a check for a null throws NPE rather than IAE.\n\nInstead of referencing to \'a lot of other code\' just use NPE\'s javadoc. Let it be an NPE ;-)','AAAAD3///wY=',186,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java','AAAAD3///wA='),(138,3,'2010-03-10 05:19:08','P',1,'I\'ve never seen that style before. Furthermore, an NPE is something which usually occurs when a method is invoked against a null value, which is semantically different from a value with a bad value. So I\'m with Mykola that we should probably use IAE here.','AAAAD3///wY=',186,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java','AAAAD3///wE='),(138,11,'2010-03-10 05:19:08','P',1,'Does NPE make sense here and wouldn\'t it be better to use the same IAE?',NULL,186,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java','AAAAD3///ws='),(138,1,'2010-03-10 05:19:08','P',1,'Good question, but a lot of other Java code takes the style that a check for a null throws NPE rather than IAE.\n\nI could just omit the null check altogether, in which case we\'d probably crash during equalsIgnoreCase due to one of the arguments being null, and result in the same NPE message.\n\nMy preference is for what I wrote.  :-)','AAAAD3///ws=',186,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java','AAAAD3///wY='),(87,1,'2010-03-10 05:19:08','P',1,'Indentation and leading whitespace is all wrong here, our project standard is indent with tabs only.\n\nThis class also should be static if we have to use an Authenticator.  We don\'t want to publish an Authenticator instance to the JRE that has a handle back to the TransportHttp \"this\", as that could pin an entire Repository object and its data files in memory for the indefinite future.',NULL,191,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAD3///xI='),(269,1,'2010-03-10 05:19:08','P',1,'Indentation is wrong here; we use tabs not spaces.\n\nBut I have to wonder if this is the only way to inject authentication data into the JRE URL library.  If it is we\'re toast as a library because nobody else can install an HTTP authenticator while we are using the HTTP network connections, and that\'s just plain evil.',NULL,191,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAD3///xM='),(257,1,'2010-03-10 05:19:08','P',1,'That\'s better than the prior patch.  You should squash these two together into a single commit.\n\nAlso, I think you can avoid using the toPrivateString() method on URIish when you do that and instead get the password data directly from the URIish.  This reduces the chances that we\'ll publish the password as part of an error messages when things fail.',NULL,192,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAAAD3///xA='),(173,8,'2010-03-10 05:19:08','P',1,'Can\'t we make getTarget a part of the Ref API?',NULL,194,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RefTest.java','AAAAEX////s='),(173,1,'2010-03-10 05:19:08','P',1,'Good point.  I\'ll add getTarget() and isSymbolic() to the Ref API, so we don\'t have to do instanceof and downcasts.  I\'ll respin the series on the same base and upload replacements shortly.','AAAAEX////s=',194,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RefTest.java','AAAAEX///+U='),(166,8,'2010-03-10 05:19:08','P',1,'Gerrit thinks a comment starts here...',NULL,194,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/RefSpecTest.java','AAAAEX////w='),(166,1,'2010-03-10 05:19:08','P',1,'Yea, there\'s a known bug where Gerrit starts a comment in the middle of a string containing /*.  Gerrit\'s syntax coloring doesn\'t have a full grasp on the language model because its seeing text one line at a time, not the full file content.','AAAAEX////w=',194,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/RefSpecTest.java','AAAAEX///+Q='),(90,8,'2010-03-10 05:19:08','P',1,'Make abstract or call from subclasses',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java','AAAAEX///+8='),(90,1,'2010-03-10 05:19:08','P',1,'Thanks, create() and close() will be abstract in the next iteration.','AAAAEX///+8=',194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java','AAAAEX///+M='),(376,8,'2010-03-10 05:19:08','P',1,'No test coverage',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectory.java','AAAAEX////c='),(324,8,'2010-03-10 05:19:08','P',1,'No test coveage',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectory.java','AAAAEX////g='),(236,8,'2010-03-10 05:19:08','P',1,'No tests anymore?',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectory.java','AAAAEX////k='),(216,8,'2010-03-10 05:19:08','P',1,'This condition is not covered by any tests',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectory.java','AAAAEX////o='),(585,8,'2010-03-10 05:19:08','P',1,'no test coverage',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectory.java','AAAAEX////Y='),(105,8,'2010-03-10 05:19:08','P',1,'No test coverage?',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectoryUpdate.java','AAAAEX///+k='),(111,8,'2010-03-10 05:19:08','P',1,'No test coverage?',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectoryUpdate.java','AAAAEX///+o='),(121,8,'2010-03-10 05:19:08','P',1,'No test coverage',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectoryUpdate.java','AAAAEX///+s='),(119,8,'2010-03-10 05:19:08','P',1,'No test coverage',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectoryUpdate.java','AAAAEX///+w='),(143,8,'2010-03-10 05:19:08','P',1,'No test coverage (maye was not before either)',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefRename.java','AAAAEX////E='),(136,8,'2010-03-10 05:19:08','P',1,'No test coverage',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefRename.java','AAAAEX////I='),(128,8,'2010-03-10 05:19:08','P',1,'No test coverage',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefRename.java','AAAAEX////M='),(118,8,'2010-03-10 05:19:08','P',1,'No test coverage',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefRename.java','AAAAEX////Q='),(92,8,'2010-03-10 05:19:08','P',1,'no coverage',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefRename.java','AAAAEX////U='),(332,8,'2010-03-10 05:19:08','P',1,'Littöe  test coverage',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefUpdate.java','AAAAEX////A='),(597,8,'2010-03-10 05:19:08','P',1,'I\'m not very fond of instanceof tests',NULL,194,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAEX///+4='),(734,1,'2010-03-10 05:19:08','P',1,'Fixed.',NULL,194,4,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/T0003_Basic.java','AAAAEX///3w='),(734,8,'2010-03-10 05:19:08','P',1,'Document this better than the name. The issue occurs because the tests write directly to the .git directory',NULL,194,4,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/T0003_Basic.java','AAAAEX///4I='),(107,1,'2010-03-10 05:19:08','P',1,'Converted to be abstract.',NULL,194,4,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java','AAAAEX///3s='),(107,8,'2010-03-10 05:19:08','P',1,'Why is this method both here and in the RefDirectory class. It is also differenct and not covered by tests',NULL,194,4,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java','AAAAEX///4M='),(550,8,'2010-03-10 05:19:08','P',1,'No test coverage',NULL,195,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/RefUpdate.java','AAAAEX///+c='),(1,4,'2010-03-10 15:26:29','P',1,'console is the only project requiring 1.6 and it\'s only used if we run on 1.6, see http://egit.eclipse.org/w/?p=jgit.git;a=commit;h=5f177bde33423689176494415cab3204193e965b',NULL,200,1,'org.eclipse.jgit.console/.classpath','AAAAD3///so='),(1,1,'2010-03-10 15:26:29','P',1,'Correct, this project must be a 1.6 project.','AAAAD3///so=',200,1,'org.eclipse.jgit.console/.classpath','AAAAD3///sU='),(1,3,'2010-03-10 15:26:29','P',1,'Are we targeting a minimum of 1.6 or 1.5?',NULL,200,1,'org.eclipse.jgit.console/.classpath','AAAAD3///tE='),(1,8,'2010-03-10 15:26:29','P',1,'The console parts require 1.6. Everything else works with 1.5.','AAAAD3///tA=',200,1,'org.eclipse.jgit.console/META-INF/MANIFEST.MF','AAAAD3///sc='),(1,8,'2010-03-10 15:26:29','P',1,'I\'d rather do just a minimal revert here and do other fixes on top of this.\nOther than thay, yes we probably should.','AAAAD3///sQ=',200,1,'org.eclipse.jgit.console/META-INF/MANIFEST.MF','AAAAD3///sE='),(1,1,'2010-03-10 15:26:29','P',1,'Shouldn\'t we have version tags on the import-package statements?',NULL,200,1,'org.eclipse.jgit.console/META-INF/MANIFEST.MF','AAAAD3///sQ='),(1,3,'2010-03-10 15:26:29','P',1,'Are we targetting a minimum of 1.6 or 1.5?',NULL,200,1,'org.eclipse.jgit.console/META-INF/MANIFEST.MF','AAAAD3///tA='),(102,8,'2010-03-10 05:19:08','P',0,'How is it partially configured? We have a manifest, dont\' we?se\nCan we somehow have make it an option to generate a mmanifest, but not get it generated just because I try to make sure mvn test works?','AAAAD3///sM=',200,1,'org.eclipse.jgit.console/pom.xml','AAAAD3///r8='),(102,8,'2010-03-10 05:19:08','P',0,'ok. I have no real to verify it anyway.','AAAAD3///sM=',200,1,'org.eclipse.jgit.console/pom.xml','AAAAD3///sA='),(102,1,'2010-03-10 05:19:08','P',0,'If we\'re dropping the execution of this plugin, we should just drop the plugin entirely from the POM.  We don\'t want to leave it partially configured but never used.  That\'s worse than not using it all.',NULL,200,1,'org.eclipse.jgit.console/pom.xml','AAAAD3///sM='),(1,3,'2010-03-10 15:26:29','P',1,'This is 1.5, for example.',NULL,200,1,'org.eclipse.jgit.junit/.classpath','AAAAD3///s8='),(1,8,'2010-03-10 15:26:29','P',1,'That is a 1.5 compatible JRE, not 1.5 specifically. Look up \"execution environment\" for more information.','AAAAD3///s8=',200,1,'org.eclipse.jgit.junit/.classpath','AAAAD3///sg='),(1,1,'2010-03-10 15:26:29','P',1,'Shouldn\'t this be tst/ ?',NULL,203,1,'org.eclipse.jgit.http.test/build.properties','AAAAEH///6c='),(1,8,'2010-03-10 15:26:29','P',1,'We probably shlould be consistent, but I don\'t think much thought has been done regarding what to prefer. Bundles are closer to the unit of packaging and versioning , than packages themselves.\n\nMaking sure we re-export everything seems easier in  Eclipse with biundles than packages. but other than that I have no clear preferenvce myself.','AAAAEH///6g=',203,1,'org.eclipse.jgit.http.test/META-INF/MANIFEST.MF','AAAAEH///44='),(1,1,'2010-03-10 15:26:29','P',1,'I thought we were trying to prefer Import-Package?',NULL,203,1,'org.eclipse.jgit.http.test/META-INF/MANIFEST.MF','AAAAEH///6g='),(9,2,'2010-01-20 21:27:51','d',1,'Can you remove the JGit feature reference in the site? I like the old version, we don\'t want to produce the EGit site with the JGit plugin... it will be available elsewhere',NULL,206,9,'org.eclipse.egit-updatesite/site.xml','AAAAEX///7o='),(9,2,'2010-01-20 21:33:59','d',1,'I prefer the old version, no need to have JGit here.',NULL,206,10,'org.eclipse.egit-updatesite/site.xml','AAAAEX///7Y='),(64,1,'2010-03-10 05:19:08','P',1,'Style-nit:  We don\'t use @author tags.\n\nAlso, please try to reorganize the Javadoc to have a single short sentence for the first line, and then use <p> to break paragraphs.  E.g.:\n\n /** \n  * {@link ObjectDatabase} wrapper providing temporary lookup caching.\n  * <p>\n  * The base class for {@code ObjectDatabase}s that wrap other \n  * database instances and optimize querying for objects by caching\n  * some database dependent information.  Instances of this class  \n  * (or any of its subclasses) can be returned from the method \n  * {@link ObjectDatabase#newCachedDatabase()}.  This class can be \n  * used in scenarios where the database does not change, or when\n  * changes in the database while some operation is in progress is   \n  * an acceptable risk.\n  * <p>\n  * The default implementation delegates all requests to the wrapped\n  * database.  The instance might be indirectly invalidated if the \n  * wrapped instance is closed.  Closing the delegating instance\n  * does not implies closing the wrapped instance. For alternative\n  * databases, cached instances are used as well.\n  */',NULL,228,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/CachedObjectDatabase.java','AAAAEX///60='),(128,1,'2010-03-10 05:19:08','P',1,'Why not just return this?',NULL,228,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/CachedObjectDatabase.java','AAAAEX///6w='),(115,1,'2010-03-10 05:19:08','P',1,'Given how this is line wrapping (and with the ObjectIdSubclassMap switch), I\'d actually prefer:\n\n  if (unpackedObjects.get(objectId) == null)\n    return null;\n  return super.openObject2(curs, objectName, objectId);\n\nAlso, you should implement hasObject on this database, but given the way the signature is, we have to do it through two methods:\n\n  @Override\n  protected abstract boolean hasObject1(AnyObjectId objectId) {\n    if (unpackedObjects.get(objectId) != null)\n      return true;  // known to be loose\n    return super.hasObject1(objectId);\n  }\n\n  @Override\n  protected abstract boolean hasObject2(String name) {\n    return false;  // loose objects were tested by hasObject1\n  }',NULL,228,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/CachedObjectDirectory.java','AAAAEX///6c='),(73,1,'2010-03-10 05:19:08','P',1,'This is some pretty deeply nested code, and I\'m not sure I like the idea of having the hex string test logic duplicated here.\n\nWhat about this alternative implementation?\n\n  String[] fanout = objects.list();\n  if (fanout == null)\n    fanout = new String[0];\n\n  for (String d : fanout) {\n    if (d.length() != 2)\n      continue;\n\n    String[] entries = new File(objects, d).list();\n    if (entries == null)\n      continue;\n\n    for (String e : entries) {\n      if (e.length() != Constants.OBJECT_ID_STRING_LENGTH - 2)\n        continue;\n\n      try {\n        unpackedObjects.add(ObjectId.fromString(d + e));\n      } catch (IllegalArgumentException notAnObject) {\n      }\n    }\n  }\n\nThe odds of finding a non-hex file inside of a loose object directory is incredibly low, especially once you include the test for length = 38 like we do at the start of the loop.  So we are very unlikely to throw an exception during the scan.',NULL,228,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/CachedObjectDirectory.java','AAAAEX///6g='),(62,1,'2010-03-10 05:19:08','P',1,'You should use ObjectId, to prevent a MutableObjectId from being stored and changed behind your back.\n\nAlso, due to the need to support AnyObjectId during openObject2 below, and the oddity of how RevObject gets used, I would actually use a ObjectIdSubclassMap<ObjectId> here instead of the HashSet.  Its the same type we use to support efficient traversal in a RevWalk, but probably will use a lot less memory, and knows how to work around the RevObject hashCode/equals braindamage.',NULL,228,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/CachedObjectDirectory.java','AAAAEX///6k='),(52,1,'2010-03-10 05:19:08','P',1,'I would reword this with a reference to the class:\n\n  * The cached instance of an {@link ObjectDirectory}.\n  * <p>\n  * This class caches the list of loose objects in memory, so\n  * the file system is not queried with stat calls.',NULL,228,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/CachedObjectDirectory.java','AAAAEX///6o='),(55,1,'2010-03-10 05:19:08','P',1,'Style nit:  We don\'t use @author tags.',NULL,228,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/CachedObjectDirectory.java','AAAAEX///6s='),(136,1,'2010-03-10 05:19:08','P',1,'Style-nit:  Please add a blank line before the documentation and declaration of this new member.',NULL,228,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAEX///6Y='),(1,4,'2010-03-10 15:26:29','P',1,'trailing whitespace',NULL,244,3,'org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/gsql_query.txt','AAAAEX///xI='),(1,4,'2010-03-10 15:26:29','P',1,'trailing whitespace',NULL,244,4,'org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/gsql_query.txt','AAAAEX///wA='),(1,4,'2010-03-10 15:26:29','P',1,'trailing whitespace',NULL,244,4,'org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/gsql_query.txt','AAAAEX///wE='),(75,4,'2010-03-10 05:19:08','P',1,'ok, didn\'t read carefully enough','AAAAEX///vo=',244,5,'org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/CSV.java','AAAAEn////k='),(75,1,'2010-03-10 05:19:08','P',1,'No, we can\'t rename it readLines(), because it reads exactly one line and returns it.  The values in the list are the columns on that read line.','AAAAEX///vw=',244,5,'org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/CSV.java','AAAAEX///vo='),(75,4,'2010-03-10 05:19:08','P',1,'can we name this method readLines() to make clear it reads not just a single line',NULL,244,5,'org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/CSV.java','AAAAEX///vw='),(22,2,'2010-01-27 18:28:21','P',1,'Can we change this to http://www.eclipse.org/egit/updates\n\n?',NULL,246,1,'org.eclipse.egit-feature/feature.xml','AAAAEX///zU='),(80,1,'2010-01-27 22:15:58','P',1,'Should we be this specific?  Why not just include the entire web directory?',NULL,247,1,'org.eclipse.egit-updatesite/pom.xml','AAAAEX///yE='),(88,1,'2010-01-27 22:15:58','P',1,'I\'d prefer the blank line before the new plugin, not after it where there\'s nothing to pad to.',NULL,247,1,'org.eclipse.egit-updatesite/pom.xml','AAAAEX///yI='),(11,1,'2010-01-27 22:22:53','P',1,'Just today I submitted a change to EGit that did at least some of this... you should rebase onto current master I think.',NULL,248,1,'org.eclipse.egit-feature/feature.properties','AAAAEX///xw='),(1,1,'2010-03-10 15:26:29','P',1,'Oh, sorry, you are right, we did agree to a combined update site.  Forget I said anything.  :-)','AAAAEX///xs=',249,1,'org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml','AAAAEX///w8='),(1,1,'2010-03-10 15:26:29','P',1,'This is JGit, are we sure we want to be using the egit/updates site?',NULL,249,1,'org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml','AAAAEX///x8='),(1,4,'2010-03-10 15:26:29','P',1,'I thought we agreed to publish a joint update site : http://dev.eclipse.org/mhonarc/lists/egit-dev/msg00742.html\nwhich is now published under http://download.eclipse.org/egit/updates. Currently we haven\'t published another http://download.eclipse.org/jgit/updates\n\nIf we want to publish another additional update site for JGit only, we end up with 2 URLs here (1 for joint update site with EGit + JGit and another one with just JGit). I feel this could look rather confusing for users.',NULL,249,1,'org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml','AAAAEX///xs='),(603,4,'2010-03-10 05:19:08','P',1,'s/its/it\'s/',NULL,250,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java','AAAAEX///v0='),(13,4,'2010-02-01 15:41:36','P',1,'ok',NULL,253,1,'.eclipse_iplog','AAAAEn///+A='),(13,1,'2010-02-01 15:09:40','P',1,'I\'m only reporting what the automated IP log tools are reporting.  E.g. if you look at the standard automatic log for EGit [1] you will see the same information presented, which doesn\'t include the \"unmodified binary\" use flag.  Because the IP team didn\'t tag this CQ properly.\n\n[1] http://www.eclipse.org/projects/ip_log.php?projectid=technology.egit','AAAAEn///+U=',253,1,'.eclipse_iplog','AAAAEn///+E='),(13,4,'2010-02-01 09:20:42','P',1,'This is consistent with https://dev.eclipse.org/ipzilla/show_bug.cgi?id=3589 but isn\'t this an unmodified binary use ?',NULL,253,1,'.eclipse_iplog','AAAAEn///+U='),(388,4,'2010-03-10 05:19:08','P',1,'trailing whitespace',NULL,263,1,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAAAE3///74='),(215,1,'2010-03-10 05:19:08','P',1,'Of course your right, we leaked here.  Shouldn\'t we also wrap the for loop above in a try/finally so that if we hit the IOException \"Early EOF\" above we still don\'t leak the file handle?\n\nBetter, we can just replace the entire method with our IO.readFully() method....  I\'ll post a patch in a second.',NULL,266,1,'org.eclipse.jgit/src/org/eclipse/jgit/diff/RawText.java','AAAAE3///84='),(165,1,'2010-02-03 16:37:42','P',1,'Always doing a content check is horribly expensive.  Normally a Git application will check timestamps between the indexEntry and resourceEntry, and then fall back into content check only if a race condition was detected.  The logic is roughly:\n\n  IF indexEntry.time != resourceEntry.time:\n    assume dirty / modified\n\n  ELSE:\n    IF indexEntry.time != indexFile.time:\n        assume clean\n\n    ELSE:\n       IF indexContent == resourceContent:\n         set indexFile.time = resourceEntry.time\n         save indexFile\n\n       ELSE:\n         set indexFile.time != resourceEntry.time\n         save indexFile\n\nThis is the \"racily clean\" or \"racy git\" problem in Git.  For a bit more details, try looking at DirCacheEntry at the mightBeRacilyClean and smudgeRacilyClean methods.  The decorator code is basically doing the work of \"git status\" in command line tools, it should be taking advantage of the same strategy about checking file modification times, falling back into content checks when there is a race condition, and correcting the cached index timestamp after a content check so we don\'t have to do it again during a future request.\n\nBasically that\'s what the TODO you deleted was trying to talk about.',NULL,267,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceAdapter.java','AAAAE3///8g='),(363,3,'2010-02-16 22:29:09','P',1,'There\'s no dice to begin with; why do we need to comment this fact?',NULL,269,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitProjectsImportPage.java','AAAAE3///sI='),(346,3,'2010-02-16 22:29:09','P',1,'Why did we remove the (non-JavaDoc) comment here? The purpose of including it is to note that the method comes from elsewhere, but without overriding the JavaDoc comment. It may get generated again later.',NULL,269,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitProjectsImportPage.java','AAAAE3///sM='),(237,3,'2010-02-16 22:29:09','P',1,'Is it worth noting that this is something used from GWT Designer? Does it make sense to keep this in the main repository?',NULL,269,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitProjectsImportPage.java','AAAAE3///sQ='),(14,1,'2010-02-11 15:17:22','P',1,'Hmm.  Probably doesn\'t need to be .2.  But its mostly pointless I think.  When we merge SWTBot based tests we have to change this line anyway to [4.0.0,5.0.0) I guess.  Right now our CQ 3589 declared 3.8.2 reuse, so that is what I was sticking with.','AAAAE3///zY=',273,1,'org.eclipse.egit.core.test/META-INF/MANIFEST.MF','AAAAE3///zI='),(14,3,'2010-02-11 15:07:19','P',1,'Does this really need to be 3.8.2? Why not 3.8.0?',NULL,273,1,'org.eclipse.egit.core.test/META-INF/MANIFEST.MF','AAAAE3///zY='),(9,1,'2010-02-11 15:17:22','P',1,'Yup.  Its a bug in Gerrit Code Review.  I\'ve logged it as http://code.google.com/p/gerrit/issues/detail?id=445','AAAAE3///zU=',273,1,'org.eclipse.egit.core/META-INF/MANIFEST.MF','AAAAE3///zM='),(9,3,'2010-02-11 15:07:19','P',1,'Is this trailing whitespace I see? It\'s not red, but it looks like it highlighted a trailing space too.',NULL,273,1,'org.eclipse.egit.core/META-INF/MANIFEST.MF','AAAAE3///zU='),(317,38,'2010-02-05 16:51:57','P',1,'I\'d recommend using perspectiveByLabel() instead to make tests more readable.',NULL,275,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/wizards/clone/GitCloneWizardTest.java','AAAAE3///6I='),(74,1,'2010-02-08 16:39:56','P',1,'This file is full of whitespace errors.  Please consider cleaning them up.',NULL,276,1,'org.eclipse.egit.doc/build-help.xml','AAAAE3///5Q='),(3,1,'2010-02-08 16:39:56','P',1,'We\'ve been using %plugin_name and %provider_name within EGit for these localized tags.  Can you please match that?',NULL,276,1,'org.eclipse.egit.doc/META-INF/MANIFEST.MF','AAAAE3///5U='),(3,4,'2010-02-09 10:16:31','P',1,'s/EGit Documentation/EGit Documentation (Incubation)/',NULL,276,1,'org.eclipse.egit.doc/plugin.properties','AAAAE3///4I='),(7,4,'2010-03-10 23:28:21','P',1,'style nit: trailing whitespace all over this file',NULL,276,2,'org.eclipse.egit.doc/build-help.xml','AAAAGX////c='),(51,4,'2010-03-10 23:28:21','P',1,'trailing whitespace',NULL,276,2,'org.eclipse.egit.doc/userguide/Inspecting-the-state-of-the-Repository.html','AAAAGX////Y='),(29,4,'2010-03-10 23:28:21','P',1,'trailing whitespace',NULL,276,2,'org.eclipse.egit.doc/userguide/Updating-This-Document.html','AAAAGX////U='),(74,4,'2010-03-10 23:28:21','P',1,'trailing whitespace',NULL,276,2,'org.eclipse.egit.doc/userguide/Working-with-remote-Repositories.html','AAAAGX////Q='),(716,1,'2010-03-10 05:19:08','P',1,'I\'m not sure I see the value in a hook being right here.  There isn\'t any harm to doing the following for loop, and then immediately jumping into the PreReceiveHook implementation in Gerrit Code Review.\n\nBasically, I don\'t see what this hook gives us that we can\'t already do in PreReceiveHook.\n\nKnowing our conversations about the particular feature you are trying to implement in Gerrit, what we really need is to be able to influence the Map<String,Ref> that is used inside of sendAdvertisedRefs.  Altering that collection needs to be different from PreReceiveHook, because its fired so much earlier than the PreReceiveHook.\n\nWe also need to expose the Set<ObjectId> that the IndexPack inside of receivePack generated.  That set needs to be visible to the PreReceiveHook.  Because then Gerrit can complain and reject everything flat out if that object set doesn\'t jive with what you can actually see.',NULL,279,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///4k='),(343,1,'2010-03-10 05:19:08','P',1,'Style-nit: You can get this all on one line:\n\n  /** @return the hook invoked before validation occurs. */',NULL,279,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///4o='),(355,1,'2010-03-10 05:19:08','P',1,'Style-nit: I don\'t think we use tabs to indent in Javadoc blocks.',NULL,279,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///4s='),(192,1,'2010-03-10 05:19:08','P',1,'Style-nit: Keep the order consistent.  You declared the field before the preReceive field is declared.  Initialize it before too.',NULL,279,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///4w='),(49,1,'2010-03-10 05:19:08','P',1,'Can you elaborate a bit more on the processing phase?  When is this hook invoked relative to PreReceiveHook?',NULL,279,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ValidationHook.java','AAAAE3///40='),(71,1,'2010-03-10 05:19:08','P',1,'Its unclear if its OK for the hook to mark a ReceiveCommand\'s status in order to reject the operation.  If you compare this class\'s Javadoc with the Javadoc in PreReceiveHook, you\'ll see what I mean.  We\'re a bit more verbose there about how to use the interface.',NULL,279,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ValidationHook.java','AAAAE3///44='),(62,1,'2010-03-10 05:19:08','P',1,'Style-nit: If you drop final keyword from the two arguments, you might be able to avoid breaking the line on this method declaration.',NULL,279,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ValidationHook.java','AAAAE3///48='),(604,1,'2010-03-10 05:19:08','P',1,'Removing an entry from the map while iterating it isn\'t safe.  To do this safely you must use an Iterator\'s remove() method to whack the entry you don\'t want anymore.\n\nWorse, the default map returned by getAllRefs() doesn\'t fully implement the Map contract here.  More specifically, its Iterator is broken and doesn\'t implement remove().\n\nAlso, how are we going to do this efficiently in Gerrit Code Review?  Remember we are getting refs/changes/nn/ccnn/p refs one at a time in this loop.  Doing a database query to see what branch that change is on is horribly inefficient.  Instead it would be more efficient to query Gerrit\'s database and do a sort-merge-join thing inside of the filter.\n\nSo basically I wonder if we shouldn\'t just pass the entire map into the filter, and let it return to us a map that we work with.  Where that map might be the original map, or the original map after making changes, or just a whole new map instance that holds a selection of the original map\'s entries.',NULL,280,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///30='),(604,31,'2010-03-10 05:19:08','P',1,'Done','AAAAE3///30=',280,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///3c='),(67,1,'2010-03-10 05:19:08','P',1,'Be nice to have at least a one sentence summary of the method, given that this is a public interface applications can choose to implement in their code.',NULL,280,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefFilter.java','AAAAE3///34='),(73,1,'2010-03-10 05:19:08','P',1,'Style-nit: Final in an interface argument is pointless.',NULL,280,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefFilter.java','AAAAE3///38='),(73,31,'2010-03-10 05:19:08','P',1,'Done','AAAAE3///38=',280,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefFilter.java','AAAAE3///3g='),(67,31,'2010-03-10 05:19:08','P',1,'Done','AAAAE3///34=',280,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefFilter.java','AAAAE3///3k='),(59,31,'2010-03-10 05:19:08','P',1,'Done','AAAAE3///4A=',280,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefFilter.java','AAAAE3///3o='),(8,31,'2010-03-10 05:19:08','P',1,'Done','AAAAE3///4E=',280,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefFilter.java','AAAAE3///3Y='),(59,1,'2010-03-10 05:19:08','P',1,'You probably should say it shows all refs.',NULL,280,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefFilter.java','AAAAE3///4A='),(8,1,'2010-03-10 05:19:08','P',1,'Wrong copyright year.',NULL,280,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefFilter.java','AAAAE3///4E='),(249,31,'2010-03-10 05:19:08','P',1,'oops.','AAAAE3///3M=',280,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java','AAAAE3///3A='),(249,1,'2010-03-10 05:19:08','P',1,'You meant upload pack here.',NULL,280,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java','AAAAE3///3M='),(351,31,'2010-03-10 05:19:08','P',1,'Done','AAAAE3///2s=',280,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///2c='),(351,1,'2010-03-10 05:19:08','P',1,'Like in UploadPack I find this awkward wording.  Maybe:\n\n  * <p>\n  * Only refs allowed by this filter will be shown to the client.\n  * Clients may still attempt to create or update a reference\n  * hidden by the configured RefFilter.  These attempts should\n  * be rejected by a matching {@link PreReceiveHook}.\n\nBasically one of the corner conditions here is, lets say the RefFilter hides refs/heads/sekret from the client.  The client might still try to create that branch, as he can\'t see it, so he assumes its available.  We loosely enforce the security of that update within validateCommands(), but the PreReceiveHook really should be playing in partnership with the RefFilter to ensure the client doesn\'t overwrite a branch he can\'t see.',NULL,280,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///2s='),(192,1,'2010-03-10 05:19:08','P',1,'No, this is the repository the upload is reading from.',NULL,280,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java','AAAAE3///20='),(249,31,'2010-03-10 05:19:08','P',1,'Done','AAAAE3///2w=',280,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java','AAAAE3///2g='),(192,31,'2010-03-10 05:19:08','P',1,'Done','AAAAE3///20=',280,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java','AAAAE3///2k='),(249,1,'2010-03-10 05:19:08','P',1,'Reading this again, this is awkward.  It makes no sense to me in context.  I would instead suggest:\n\n  * <p>\n  * Only refs allowed by this filter will be sent to the client.  This\n  * can be used by a server to restrict the list of references the\n  * client can obtain through clone or fetch, effectively limiting the\n  * access to only certain refs.',NULL,280,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java','AAAAE3///2w='),(1146,1,'2010-03-10 05:19:08','P',1,'This collection has to be empty by the time writeIdx comes around.  If its not the pack is corrupt and unusable, because the caller asked for something we don\'t actually have.\n\nYou need to process the baseById collection before fixThinPack gets called.\n\nAnd I think I just found a bug in IndexPack.  We are iterating baseById and mutating it at the same time during fixThinPack.  Which isn\'t exactly safe.  We must be getting lucky here.',NULL,282,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///18='),(1132,1,'2010-03-10 05:19:08','P',1,'Since this is called after writeIdx() executes the initialEntryCount can\'t be relied upon to cut the list at the proper point.  Its been sorted inside of writeIdx() which means this position is now bogus and has no relationship with what the user actually sent.\n\nUnfortunately you\'ll have to have the caller set a flag whether or not they need this data, and if they do, grab it before we get as far as writeIdx() being invoked.  That makes my remarks in ReceivePack even more complex, because I think you may need to add a flag method to ReceivePack to let the ReceivePack caller tell us if they need this collection or not, so IndexPack can do the bookkeeping if they do.',NULL,282,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///2A='),(1132,31,'2010-03-10 05:19:08','d',1,'Done','AAAAE3///2A=',282,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///z0='),(1146,31,'2010-03-10 05:19:08','d',1,'Done','AAAAE3///18=',282,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///zw='),(246,1,'2010-03-10 05:19:08','P',1,'I\'d call this getBaseObjectIds().  Also, I think its Javadoc needs a bit more explanation:\n\n  /** @return the set of objects the incoming pack assumed for delta bases. */',NULL,282,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///2E='),(251,1,'2010-03-10 05:19:08','P',1,'Call this getNewObjectIds() since that\'s really what it is.\n\nAlso, I\'d like to lazily pull this off the IndexPack instance, rather than always pulling it.  Which means maybe promote the IndexPack object to being a member field, and returning an empty collection here if it didn\'t successfully complete the ip.index method.',NULL,282,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///2I='),(251,31,'2010-03-10 05:19:08','d',1,'Done','AAAAE3///2I=',282,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///z4='),(246,31,'2010-03-10 05:19:08','d',1,'Done','AAAAE3///2E=',282,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///z8='),(394,1,'2010-03-10 05:19:08','P',1,'I think you should compute needBaseObjectIds right before this method call.  Prior to resolveDeltas baseById can contain objects which are also in this pack file, and thus aren\'t in the assumed base and shouldn\'t be reported in that baseIds collection.  After resolveDeltas, baseById contains only the objects which aren\'t in this pack, and must come from the local repository.  That\'s the set you want.',NULL,282,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///x0='),(370,31,'2010-03-10 05:19:08','d',1,'Done','AAAAE3///xw=',282,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///xc='),(394,31,'2010-03-10 05:19:08','d',1,'Done','AAAAE3///x0=',282,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///xg='),(370,1,'2010-03-10 05:19:08','P',1,'I think this is being computed too early.  If there are deltas in this pack, they won\'t appear in the entry collection yet.  They don\'t get added until resolveDeltas runs.  Worse, if this is a thin pack, some detals don\'t get added until the middle of fixThinPack().\n\nI think instead of doing this loop here, write a utility function that does:\n\n  entries[entryCount++] = entry;\n\n  if (needNewObjectIds)\n    newObjectIds.add(entry);\n\nand replace any location that assigns into the entries array with this utility method.  Except in fixThinPack when we add oe right after writeWholeObject.\n\nAnd since you now need to allocate the set kind of early, maybe drop the boolean field altogether and use the set != null to determine if the set should be updated or not.',NULL,282,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///xw='),(704,31,'2010-03-10 05:19:08','d',1,'Done','AAAAE3///xs=',282,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///xk='),(704,1,'2010-03-10 05:19:08','P',1,'Not every ReceivePack user wants these collections.  So we probably should expose these set methods as pass-throughs.  But that means we actually need booleans here in ReceivePack to hold the flags until the IndexPack can be allocated.',NULL,282,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///xs='),(1182,31,'2010-03-10 05:19:08','d',1,'Done','AAAAE3///xA=',282,6,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///vc='),(383,31,'2010-03-10 05:19:08','d',1,'Done','AAAAE3///xE=',282,6,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///vk='),(1173,31,'2010-03-10 05:19:08','d',1,'Done','AAAAE3///w8=',282,6,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///vo='),(1173,1,'2010-03-10 05:19:08','P',1,'I think you should make both of these getters public, with proper Javadoc.  If the flag to enable their collection is public, then their contents should also be public.',NULL,282,6,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///w8='),(1182,1,'2010-03-10 05:19:08','P',1,'Style-nit: Unnecessary blank line.',NULL,282,6,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///xA='),(383,1,'2010-03-10 05:19:08','P',1,'Why not use a for(DeltaChain c : baseById) loop instead of Iterator?',NULL,282,6,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAE3///xE='),(83,3,'2010-03-10 05:19:08','P',1,'can we use [0,255) here, since 255 isn\'t included in the list of possible values? Can we also document the parameter and size restrictions in a JavaDoc comment above?',NULL,287,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandOutputStream.java','AAAAE3///sA='),(83,8,'2010-03-12 22:37:39','P',1,'255 is allowed\nreverting the order of operands this way is unnatural makes it easy to read it the wrong way. When there is only one condition or the condition expresses a between condition it is easier to read correctly,  min < v < max style. Howevery I prefer the variable op constant pattern always, because that aligns with how we pronounce the expression.\n\nHence this one is easier to grasp\n\nif  (chan <=0 || chan > 255) throw...\n\nAnd the valid range is [1..255], I think, according to the condition\n\nif (!( 0 < chan && chan <= 255)) would be readable too, but perhaps top many parenthese for some people.','AAAAE3///sA=',287,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandOutputStream.java','AAAAGn///78='),(83,1,'2010-03-13 00:08:33','P',1,'Done','AAAAGn///78=',287,3,'org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandOutputStream.java','AAAAGn///7w='),(447,3,'2010-03-10 05:19:08','P',1,'Worth putting in a check to ensure that there is no LF in the message?',NULL,292,4,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///rs='),(447,1,'2010-03-13 00:16:44','P',1,'No, I don\'t think its worth rejecting an LF in the string.  The reason we say \"must not contain LF\" in the javadoc is because we don\'t do a replaceAll of \"\\n\" with \"\\nerror: \" to get the prefix we insert injected at the start of each line.  Maybe I\'ll come back and actually relax that Javadoc to say \"should not\" instead of \"must not\".','AAAAE3///rs=',292,4,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAGn///7g='),(129,3,'2010-03-10 05:19:08','P',1,'This is technically an API breaking change. Are we going to release it as part of 0.7.0?',NULL,293,4,'org.eclipse.jgit/src/org/eclipse/jgit/transport/Connection.java','AAAAE3///rk='),(129,1,'2010-03-13 00:21:45','P',1,'Although its an API breakage, we aren\'t promising API compatibility until we release 1.0.  But I would like to try to avoid breaking 0.7 builds until 0.8... and we\'ll probably break API again in 0.8.   Hopefully I can slide this whole series into 0.7.0, or quickly turn around 0.8 after.  Having the side band error data from server side hooks is necessary for proper use within Gerrit Code Review over http.','AAAAE3///rk=',293,4,'org.eclipse.jgit/src/org/eclipse/jgit/transport/Connection.java','AAAAGn///7c='),(87,3,'2010-03-10 05:19:08','P',1,'Does the \\n get captured instead of the $ here? What happens if there\'s just an \\r$ instead of \\n$?',NULL,293,4,'org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java','AAAAE3///rg='),(87,1,'2010-03-13 00:21:45','P',1,'^ and $ in this regex are matching start and end of string, not start and end of line.  And the final character is either \\r or \\n, but not both.  C Git might produce a \\r if this is a continuation progress message with more messages coming, or \\n if this is the final message.  But it doesn\'t produce both over the network.','AAAAE3///rg=',293,4,'org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java','AAAAGn///7Y='),(152,3,'2010-03-10 05:19:08','P',1,'Interesting diff formatting from Gerrit here; it seems to think that r) has been changed with the remainder of the code, and the trailing ; is from line 146.',NULL,293,4,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportLocal.java','AAAAE3///rc='),(152,1,'2010-03-13 00:21:45','P',1,'The Gerrit diff bug you observed here appears to be fixed in 2.1.2 final release.  We tweaked the heuristics quite a bit between when you first reviewed the code, and now when I\'m looking through it again to address comments.','AAAAE3///rc=',293,4,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportLocal.java','AAAAGn///7U='),(641,3,'2010-03-10 05:19:08','P',1,'Is this return; strictly necessary? We\'re at the end of a method, after all.',NULL,301,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///rE='),(640,3,'2010-03-10 05:19:08','P',1,'Should this be a Constant reference? It\'s used in a few places.',NULL,301,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAE3///rI='),(641,1,'2010-03-13 00:26:02','P',1,'You thought this return wasn\'t necessary.  It is necessary, we\'re breaking out of the method early, before a whole lot of other work occurs.  So yes, it has to be here.  And I didn\'t want to reindent the rest of the method body into an else block just to avoid doing a return here.  That\'s a bigger patch, and possibly complicates reading the code worse than an early return does.','AAAAE3///rE=',301,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAGn///7M='),(640,1,'2010-03-13 00:26:02','P',1,'I\'m not going to bother making \"ERR\" a constant.  Its used twice, once here to tell the client we\'re broken, and once in the client to detect the server is broken and abort.  Its just not worth complicating the code with an additional constant.','AAAAE3///rI=',301,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAGn///7Q='),(1,1,'2010-03-10 15:26:29','P',1,'Same note as in the script, we shouldn\'t use real sounding entities here in the example data.',NULL,303,1,'tools/fixHeaders-TestData.txt','AAAAE3///t4='),(1,1,'2010-03-10 15:26:29','P',1,'I love that you wrote examples down.  But I\'d prefer that these not name real sounding entities.  I don\'t want someone grepping out code to actually think that this company owns something in here.',NULL,303,1,'tools/fixHeaders.pl','AAAAE3///t8='),(1,1,'2010-03-10 15:26:29','P',1,'This line is unused.',NULL,303,1,'tools/fixHeaders.pl','AAAAE3///uA='),(1,1,'2010-03-10 15:26:29','P',1,'For what its worth, I prefer the formatting of the current header where there is a blank line between each paragraph and the bullet items use - rather than * for each clause.  The current header is actually more similar to most uses of the BSD in the wild.',NULL,303,1,'tools/fixHeaders.pl','AAAAE3///uE='),(1,1,'2010-03-10 15:26:29','P',1,'IIRC in Perl this needs to be eq not ==.',NULL,303,1,'tools/fixHeaders.pl','AAAAE3///uI='),(1,4,'2010-03-10 15:26:29','P',1,'line is still unused',NULL,303,2,'tools/fixHeaders.pl','AAAAE3///tU='),(186,3,'2010-03-10 05:19:08','P',1,'As above',NULL,305,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportGitAnon.java','AAAAE3///q0='),(146,3,'2010-03-10 05:19:08','P',1,'Can we not in-line sIn and sOut here?',NULL,305,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportGitAnon.java','AAAAE3///q4='),(146,1,'2010-03-13 00:27:49','P',1,'Inlining the construction of sIn and sOut here makes for very long lines, which are hard to read.  And they line wrap poorly by default in Eclipse\'s source code formatter.  So I went with this simple approach of:  declare them, then wrap them, and finally use them.','AAAAE3///q4=',305,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportGitAnon.java','AAAAGn///7I='),(265,3,'2010-03-10 05:19:08','P',1,'More weird change diff markings in Gerrit',NULL,305,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportLocal.java','AAAAE3///qw='),(265,1,'2010-03-13 00:27:49','P',1,'This weird diff marking has been vastly improved in Gerrit 2.1.2.','AAAAE3///qw=',305,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportLocal.java','AAAAGn///7E='),(128,8,'2010-03-10 05:19:08','P',1,'<= is more optrimal here. We don\'t need to reserve place for a NUL byte',NULL,307,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java','AAAAE3///pk='),(128,1,'2010-03-13 00:10:18','P',1,'Done','AAAAE3///pk=',307,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java','AAAAGn///7o='),(14,4,'2010-02-19 12:11:13','P',1,'- Reference to package isn\'t respected by Tycho osgi-test-plugin, by experiment I found that bundle reference seems to work. In Eclipse both are working as expected. This is most probably a bug in Tycho. Hence I added Igor to the reviewer list.\n- We want to be Eclipse 3.4 backward compatible, 4.3.1 is the version available there.\n- pom.xml change shouldn\'t be necessary since we do manifest-first here, i.e. Maven /Tycho should pick dependencies from the manifest.','AAAAE3///pA=',309,2,'org.eclipse.egit.core.test/META-INF/MANIFEST.MF','AAAAE3///oc='),(14,3,'2010-02-19 02:14:51','P',1,'Do we want to explicitly refer to bundle name instead of package name here? Do we want to put 4.3.1 instead of 4.3?  Do we need to change any pom.xml as well?',NULL,309,2,'org.eclipse.egit.core.test/META-INF/MANIFEST.MF','AAAAE3///pA='),(47,3,'2010-02-19 02:14:51','P',1,'This change doesn\'t appear to be related to the JUnit migration?',NULL,309,2,'org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/T0001_ConnectProviderOperationTest.java','AAAAE3///o4='),(47,4,'2010-02-19 12:11:13','P',1,'That\'s right, I\'ll split that into a separate change.','AAAAE3///o4=',309,2,'org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/T0001_ConnectProviderOperationTest.java','AAAAE3///oY='),(41,3,'2010-02-19 02:14:51','P',1,'We changed the name before; but not here. Should we have changed the previous?',NULL,309,2,'org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/T0003_AdaptableFileTreeIteratorTest.java','AAAAE3///o8='),(41,4,'2010-02-19 12:11:13','P',1,'Aargh, I don\'t know what I thought when I wrote that.','AAAAE3///o8=',309,2,'org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/T0003_AdaptableFileTreeIteratorTest.java','AAAAE3///oM='),(35,3,'2010-02-19 02:18:50','P',1,'Other team providers use \'replace with HEAD\' or similar. Can we use that terminology here instead of \'discard changes\'?',NULL,310,1,'org.eclipse.egit.ui/plugin.properties','AAAAE3///ow='),(57,3,'2010-02-19 02:18:50','P',1,'Also needs to be internatoinalized',NULL,310,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DiscardChangesAction.java','AAAAE3///oo='),(34,3,'2010-02-19 02:18:50','P',1,'These messages need to be internationalised as well.',NULL,310,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DiscardChangesAction.java','AAAAE3///os='),(35,6,'2010-03-12 09:52:40','P',1,'This is not what the action does. It does not replace the content with HEAD but with the staged content in the index (as git checkout does).\n\nSo why not call it \"Replace with Git Index\".',NULL,310,6,'org.eclipse.egit.ui/plugin.properties','AAAAGn///+E='),(99,6,'2010-03-12 09:52:40','P',1,'Why do we need to change this?',NULL,310,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/RepositoryAction.java','AAAAGn///+I='),(34,8,'2010-03-12 22:18:16','P',1,'I\'d prefer Replace with file in Git Index',NULL,310,7,'org.eclipse.egit.ui/plugin.properties','AAAAGn///8M='),(122,40,'2010-03-15 21:38:49','P',1,'The comment inside the catch was a bit misleading. According to the javadoc, if a resource is a closed project, or does not exist, then the members() call will throw a CoreException. I\'ve changed this method to not add members of a given resource if their \"parent\" throws this exception.','AAAAGn///8U=',310,7,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DiscardChangesAction.java','AAAAGn///2U='),(61,40,'2010-03-15 21:38:49','P',1,'For the IOException, I could say that something went wrong while interacting with the index, since it isn\'t necessarily going to be an issue with the checkout failing.','AAAAGn///8Y=',310,7,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DiscardChangesAction.java','AAAAGn///2Y='),(63,8,'2010-03-12 22:18:16','P',1,'Non-checked exceptions gets swalllowed and ignored here. Catching RuntimeException would tell the user something bad happed',NULL,310,7,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DiscardChangesAction.java','AAAAGn///8Q='),(122,8,'2010-03-12 22:18:16','P',1,'CoreException is much wider than ResourceException, which is the one\nyou want to ignore. Wouldn\'t explicitlyt checking whether the resource exists be more precise?',NULL,310,7,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DiscardChangesAction.java','AAAAGn///8U='),(61,8,'2010-03-12 22:18:16','P',1,'Do we know this is a refresh and not something entirely different. or opposed to the IOException, which we really don\'t know much about either',NULL,310,7,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DiscardChangesAction.java','AAAAGn///8Y='),(286,44,'2010-02-19 10:05:08','P',1,'I think append(\"/\") has no effect here.\nproject.getLocation().append(selectedRepo) should work.',NULL,311,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/sharing/ExistingOrNewPage.java','AAAAE3///oU='),(1,4,'2010-03-10 15:26:29','P',1,'could you add a test which covers this case ?',NULL,315,2,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAFH////I='),(1,9,'2010-03-10 15:26:29','P',1,'Done','AAAAFH////I=',315,2,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAFX////0='),(1,4,'2010-03-10 15:26:29','P',1,'typo: s/trow/throw/',NULL,315,2,'org.eclipse.jgit/src/org/eclipse/jgit/nls/TranslationBundle.java','AAAAFH////M='),(1,9,'2010-03-10 15:26:29','P',1,'Done','AAAAFH////M=',315,2,'org.eclipse.jgit/src/org/eclipse/jgit/nls/TranslationBundle.java','AAAAFX////s='),(1,1,'2010-03-10 15:26:29','P',1,'I hate tests that sleep.  This is also prone to race conditions if the test is run on a heavily loaded system... which our automated Hudson CI builds are.  So please expend the extra effort to implement a proper barrier between the threads to ensure they both set their locale before they can continue.  It shouldn\'t that hard, use a java.util.concurrent.CyclicBarrier.',NULL,315,4,'org.eclipse.jgit.test/tst/org/eclipse/jgit/nls/TestNLS.java','AAAAF3///8s='),(1,1,'2010-03-10 15:26:29','P',1,'Did you mean to set a locale here in a test meant for the jvm default?',NULL,315,4,'org.eclipse.jgit.test/tst/org/eclipse/jgit/nls/TestNLS.java','AAAAF3///8w='),(1,9,'2010-03-10 15:26:29','d',1,'Done','AAAAF3///8s=',315,4,'org.eclipse.jgit.test/tst/org/eclipse/jgit/nls/TestNLS.java','AAAAGH////E='),(1,9,'2010-03-10 15:26:29','d',1,'Yes.','AAAAF3///8w=',315,4,'org.eclipse.jgit.test/tst/org/eclipse/jgit/nls/TestNLS.java','AAAAGH////M='),(1,1,'2010-03-10 15:26:29','P',1,'Please document what happens if the bundle fails to load for the current locale.  I know you throw an Error below.  I\'d prefer it to be a specific Error type that a caller could catch if they want to more gracefully abort due to an invalid translation.',NULL,315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAF3///84='),(1,1,'2010-03-10 15:26:29','P',1,'See my comment below about the default value; setting to null here would cause that behavior to fail.  So you\'d need to set to the initial value instead.',NULL,315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAF3///88='),(1,1,'2010-03-10 15:26:29','P',1,'Instead of doing this, extend InheritableThreadLocal above and implement its initialValue() method to construct this NLS instance.  That way when you are in default mode we still can maintain a thread-local cache of the bundles we\'ve examined.',NULL,315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAF3///9A='),(1,1,'2010-03-10 15:26:29','P',1,'Translation text can\'t change, its loaded from the code archive we ourselves came from.  So I think we should do a global table that holds a cached singleton of all translations.  Its a finite cost and \"leaking\" them after they are needed shouldn\'t be a problem.\n\nSo change this code to be:\n\n  TranslationBundle bundle = map.get(type);\n  if (bundle == null) {\n    bundle = lookupBundle(locale, type);\n    map.putIfAbsent(type, bundle);\n  }\n\nand write a global cache:\n\n  private static final Map<Locale, Map<Class, TranslationBundle>> cachedBundles\n    = new HashMap<Locale, Map<Class, TranslationBundle>>();\n\n  private static synchronized <T extends TranslationBundle>\n  T lookupBundle(Locale locale, Class<T> type) {\n    ...\n  }',NULL,315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAF3///9E='),(1,1,'2010-03-10 15:26:29','P',1,'These fields should be marked final.\n\nMaybe a ConcurrentHashMap would be better here, then we can avoid the synchronized during reads.',NULL,315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAF3///9I='),(1,1,'2010-03-10 15:26:29','P',1,'Style-nit:  instance fields before constructor.',NULL,315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAF3///9M='),(1,9,'2010-03-10 15:26:29','d',1,'Done','AAAAF3///9A=',315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAGH///+4='),(1,9,'2010-03-11 11:56:51','d',1,'Done.','AAAAF3///88=',315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAGH///+8='),(1,9,'2010-03-10 15:26:29','d',1,'Done','AAAAF3///9I=',315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAGH///+I='),(1,9,'2010-03-10 15:26:29','d',1,'Done','AAAAF3///9E=',315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAGH///+M='),(1,9,'2010-03-10 15:26:29','d',1,'Done','AAAAF3///9M=',315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAGH///+w='),(1,1,'2010-03-10 15:26:29','P',1,'Style-nit:  We prefer \"public abstract\"',NULL,315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/TranslationBundle.java','AAAAF3///80='),(1,1,'2010-03-10 15:26:29','P',1,'Style-nit:  This variable isn\'t necessary, just use the method in the for loop below.',NULL,315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/TranslationBundle.java','AAAAF3///8o='),(1,9,'2010-03-10 15:26:29','d',1,'Done','AAAAF3///8o=',315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/TranslationBundle.java','AAAAGH///+c='),(1,9,'2010-03-10 15:26:29','d',1,'Done','AAAAF3///80=',315,4,'org.eclipse.jgit/src/org/eclipse/jgit/nls/TranslationBundle.java','AAAAGH///+Y='),(79,1,'2010-03-11 20:17:16','P',1,'Style-nit:  We prefer public final.  I\'ll let it slide.',NULL,315,5,'org.eclipse.jgit/src/org/eclipse/jgit/errors/TranslationBundleException.java','AAAAGn////w='),(119,1,'2010-03-11 20:17:16','P',1,'Style-nit:  We prefer \"private final\".  I\'ll let it slide.',NULL,315,5,'org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java','AAAAGn////4='),(175,5,'2010-02-26 08:28:07','P',1,'Are you sure the this string should not be translatable? Looks too me as a good candidate and then $NON-NLS would be wrong here.',NULL,316,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java','AAAAFX////c='),(44,4,'2010-03-01 15:56:33','P',1,'I would prefer\n\"Compare with each other\"',NULL,319,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAAAFn////k='),(1,4,'2010-03-10 15:26:29','P',1,'why not range up to next version which might be incompatible ?\nversion=\"[0.6.0,0.7.0)\"',NULL,320,1,'org.eclipse.jgit.pgm/META-INF/MANIFEST.MF','AAAAFn////4='),(1,5,'2010-03-10 15:26:29','P',1,'Will be done','AAAAFn////4=',320,1,'org.eclipse.jgit.pgm/META-INF/MANIFEST.MF','AAAAFn////E='),(1,6,'2010-03-10 15:26:29','P',1,'this does not work if ref denotes a tag',NULL,320,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAF3////k='),(1,6,'2010-03-10 15:26:29','P',1,'ref can be a commit which is not a HEAD of a branch.\nShouldn\'t the message be different in that case?',NULL,320,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAF3////o='),(1,4,'2010-03-10 15:26:29','d',1,'Then I would mention here that merge strategies will check this.','AAAAFn////I=',320,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAF3///8I='),(1,5,'2010-03-10 15:26:29','P',1,'I Agree. Will be updated','AAAAF3////o=',320,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAF3///90='),(1,5,'2010-03-10 15:26:29','P',1,'I agree. I does work for lightweight tags (http://book.git-scm.com/3_git_tag.html) but not for tag objects.\nI\'ll add some code here for real tag objects','AAAAF3////k=',320,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAF3///9w='),(1,4,'2010-03-10 15:26:29','P',1,'could we use the strategy names in lower case and rather use \"-\" instead of \"_\" that\'s easier to type and I think native git does it similarily:\n\nours, theirs, simple-two-way-in-core\n\nsimple-two-way-in-core sounds weird as a strategy name.\n\nI think the semantics of these strategies should be also described shortly.',NULL,320,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAFn////0='),(1,5,'2010-03-10 15:26:29','P',1,'for native git it\'s not a hard prereq that the index is clean. The man page says \n\"git pull and git merge will stop without doing anything when local uncommitted changes overlap with files that git pull/git merge may need to update\"\nI would like to follow the same semantics. But this check would be in the merge strategies. They would fail when trying to overwrite uncommited data.','AAAAFn////w=',320,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAFn////I='),(1,4,'2010-03-10 15:26:29','P',1,'I would prefer lower case strategy names using \"-\" instead of \"_\" this is easier to type and read and native git does it similarly.\n\nours, theirs, simple-two-way-in-core\n\nsimple-two-way-in-core sounds weird as a strategy name.\n\nI think the semantics of these strategies should be also shortly described.',NULL,320,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAFn////s='),(1,4,'2010-03-10 15:26:29','P',1,'I think this clean index precondition should be explicitly checked before merge is started.',NULL,320,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAFn////w='),(1,5,'2010-03-10 15:26:29','P',1,'Done. This was a typo in the comment. Actually we support ours, theirs, simple-two-way-in-core.\nI guess \'simple-two-way-in-core\' will not be used when we have recursive, octopus strategies in place - therefore I would like not to describe this strategy.','AAAAFn////0=',320,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAFn///+8='),(1,4,'2010-03-10 15:26:29','P',1,'style nit: we don\'t use braces for single line blocks',NULL,320,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAF3///8M='),(1,4,'2010-03-10 15:26:29','P',1,'you probably unintentionally hit \"return\" here -> unnecessary whitespace',NULL,320,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAF3///8Q='),(1,5,'2010-03-10 15:26:29','P',1,'Done','AAAAF3///8M=',320,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAGH////4='),(1,5,'2010-03-10 15:26:29','P',1,'No, our checked-in code formatter does it like that. And you can see\nwhy he would do so if you set your tab width in the gerrit UI to \'4\'. By breaking the line after the \'.\' he manages to stay in our maximum line length','AAAAF3///8Q=',320,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java','AAAAGH////8='),(44,9,'2011-03-25 14:13:07','P',1,'don\'t you need a {0} placeholder in for the file name?',NULL,320,6,'org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties','AAAL3n//+dg='),(22,9,'2011-03-25 14:13:07','P',1,'don\'t you need a {0} placeholder in for the file name?',NULL,320,6,'org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties','AAAL3n//+dk='),(22,5,'2011-03-25 15:26:46','P',1,'no, I don\'t. Thats a string who is printed on his own line. In the next lines we\'ll print the pathes of the files which we don\'t want to overwrite.','AAAL3n//+dk=',320,6,'org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties','AAAL3n//+dU='),(44,5,'2011-03-25 15:26:46','P',1,'no, I don\'t. Thats a string who is printed on his own line. In the next lines we\'ll print the pathes of the files which we don\'t want to overwrite.','AAAL3n//+dg=',320,6,'org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties','AAAL3n//+dY='),(497,4,'2010-03-03 23:59:46','P',0,'style nit: pure reformatting change should be avoided (several more below)',NULL,321,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java','AAAAF3///+E='),(138,4,'2010-03-03 23:59:46','P',1,'style nit: we try to avoid pure reformatting changes',NULL,321,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java','AAAAF3///+I='),(138,4,'2010-03-04 12:14:33','P',1,'Don\'t run the auto code formatter on the whole file but only on those parts you edit. The pro of this approach is that we don\'t clutter history with pure formatting changes, the downside is that sometimes the formatting isn\'t 100% consistent.','AAAAF3///9o=',321,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java','AAAAF3///9c='),(497,46,'2010-03-04 10:34:03','P',0,'See comment above.','AAAAF3///+E=',321,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java','AAAAF3///9k='),(138,46,'2010-03-04 10:34:03','P',1,'Hi Matthias,\nI\'m aware of this, but the code formmater settings have changed, so Source->Format does introduce these changes.\nWhat\'s your suggestion here?','AAAAF3///+I=',321,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java','AAAAF3///9o='),(349,5,'2010-03-05 12:31:11','P',1,'style-nit: we don\'t use curly brackets around single line blocks',NULL,321,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java','AAAAGH////U='),(341,5,'2010-03-05 12:31:11','P',1,'style-nit: we don\'t use curly brackets around single line blocks',NULL,321,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java','AAAAGH////Y='),(48,4,'2010-03-03 23:40:34','P',1,'According to http://www.kernel.org/pub/software/scm/git/docs/gitignore.html .gitignore files can exist in any hierarchy level of the repository.\nAlso precedence has to be properly taken into account.',NULL,326,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/IgnoredResources.java','AAAAF3///+c='),(38,4,'2010-03-03 23:40:34','P',1,'why do we need this method ?',NULL,326,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/IgnoredResources.java','AAAAF3///+g='),(28,4,'2010-03-03 23:40:34','P',1,'s/ignored it appears/ignored if it appears/',NULL,326,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/IgnoredResources.java','AAAAF3///+k='),(21,4,'2010-03-03 23:40:34','P',1,'we don\'t use @author tags',NULL,326,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/IgnoredResources.java','AAAAF3///+o='),(1,4,'2010-03-03 23:40:34','P',1,'license header and copyright statement are missing',NULL,326,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/IgnoredResources.java','AAAAF3///+s='),(64,4,'2010-03-03 23:40:34','P',1,'This isn\'t interoperable with native git and breaks http://www.kernel.org/pub/software/scm/git/docs/gitignore.html .\nPatterns are not regular expressions but shell globs as specified in the gitignore help.',NULL,326,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/IgnoredResources.java','AAAAF3///+U='),(34,4,'2010-03-03 23:40:34','P',1,'We also have to respect patterns read from the file specified by the configuration variable core.excludesfile (see http://www.kernel.org/pub/software/scm/git/docs/gitignore.html ).',NULL,326,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/IgnoredResources.java','AAAAF3///+Y='),(160,11,'2010-03-08 15:07:19','d',1,'What\'s the purpose of this empty line?',NULL,331,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java','AAAAGH///9c='),(834,6,'2010-03-09 16:24:56','P',1,'You could use the content of the input field to filter the list of proposals. The list of proposals may be very long.',NULL,331,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java','AAAAGH///9A='),(224,44,'2010-03-11 08:51:40','d',1,'No. IOException does not take a localized message.','AAAAGX///+w=',332,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/ContainerTreeIterator.java','AAAAGX///+U='),(224,4,'2010-03-10 23:58:31','P',1,'non-technical, shouldn\'t that be translatable ?',NULL,332,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/ContainerTreeIterator.java','AAAAGX///+w='),(31,44,'2010-03-11 08:52:39','d',1,'Done','AAAAGX///+s=',332,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/coretext.properties','AAAAGX///+Q='),(31,4,'2010-03-10 23:58:31','P',1,'trailing whitespace ? or is an argument following here ?',NULL,332,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/coretext.properties','AAAAGX///+s='),(103,44,'2010-03-11 08:53:43','d',1,'No. IllegalStateException does not take a localized message.','AAAAGX///+o=',332,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/ListRemoteOperation.java','AAAAGX///+M='),(103,4,'2010-03-10 23:58:31','P',1,'I think this should be externalized',NULL,332,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/ListRemoteOperation.java','AAAAGX///+o='),(109,6,'2010-03-18 14:46:04','P',1,'I\'m not sure if we translate this. I ask on the mailing list.',NULL,332,2,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/BranchOperation.java','AAAAHH////I='),(1302,46,'2010-03-15 14:17:09','P',1,'Done','AAAAGn///9Y=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///24='),(1280,46,'2010-03-15 14:17:09','P',1,'Done','AAAAGn///88=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///28='),(1147,46,'2010-03-15 14:17:09','P',1,'Done','AAAAGn///9w=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3A='),(318,46,'2010-03-15 14:17:09','P',1,'Done','AAAAGn///8o=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3c='),(1048,46,'2010-03-15 14:17:09','P',1,'Added your remarks to the code in the form of comments. Let\'s try to look into this in one of the next iterations.','AAAAGn///9s=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3E='),(290,46,'2010-03-15 14:17:09','P',1,'Done','AAAAGn///8w=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3g='),(1004,46,'2010-03-15 14:17:09','P',1,'Done','AAAAGn///9U=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3I='),(260,46,'2010-03-15 14:17:09','P',1,'Done','AAAAGn///8k=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3k='),(542,46,'2010-03-15 14:17:09','P',1,'Done','AAAAGn///9I=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3M='),(160,46,'2010-03-15 14:17:09','P',1,'Added the icons support to the enum.','AAAAGn///8s=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3o='),(533,46,'2010-03-15 14:17:09','P',1,'Done','AAAAGn///9E=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3Q='),(160,46,'2010-03-15 14:17:09','P',1,'I added Icon support to the type enum, so I would rather stay with that. Going for subclasses wouldn\'t do away with the type, either, unless you would want to use instanceof to detect the actual type.','AAAAGn///9Q=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3s='),(530,46,'2010-03-15 14:17:09','P',1,'Done','AAAAGn///9M=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3U='),(108,46,'2010-03-15 14:17:09','P',1,'Done','AAAAGn///90=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3w='),(353,46,'2010-03-15 14:17:09','P',1,'Done','AAAAGn///80=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///3Y='),(353,8,'2010-03-12 22:00:28','P',1,'Reusing messages across different view is, I think, not a good thing. The name of this message clearcly states that it belongs to anoter piece of code.',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///80='),(1280,8,'2010-03-12 22:00:28','P',1,'forgot something?',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///88='),(260,8,'2010-03-12 22:00:28','P',1,'Please sort.',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///8k='),(318,8,'2010-03-12 22:00:28','P',1,'Please sort the result here',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///8o='),(160,8,'2010-03-12 22:00:28','P',1,'or attach methods to the enum values.','AAAAGn///9Q=',344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///8s='),(290,8,'2010-03-12 22:00:28','P',1,'Just iterating over the values results in easier to read code.',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///8w='),(108,1,'2010-03-12 18:41:49','P',1,'Style-nit:  As a project we prefer \"static final\".  And at least please be consistent within the same class, just 17 lines later you use the reverse ordering of \"static final\".',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///90='),(533,1,'2010-03-12 18:41:49','P',1,'Every one of these calls causes a disk IO operation.  (Well, open, read, close.  Hopefully its cached.)  You might want to cache this in the repository node when children are fetched so we aren\'t incurring this lookup every time the UI needs the label text.',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///9E='),(542,1,'2010-03-12 18:41:49','P',1,'Can you use Repository.shortenRefName here to shorten the name?  Showing refs/heads/ to a user is ugly.',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///9I='),(530,1,'2010-03-12 18:41:49','P',1,'Can you use Repository.shortenRefName here to shorten the leaf\'s name?  Showing refs/heads/ to a user is ugly.',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///9M='),(160,1,'2010-03-12 18:41:49','P',1,'Would it be cleaner to just have different subclasses of this class for the different types that can appear?  Rather than faking a type system using an enum and some rather ugly switch statements?',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///9Q='),(1048,1,'2010-03-12 18:41:49','P',1,'Hmm.  We probably can\'t active detect file locks on pack files on Windows, can we?  It would be nice if we could support a delete, but only if the repository is reasonably believed to be not-in-use right now.\n\nWithin EGit you might be able to check GitProjectData and its repositoryCache to see if the repository is open by this workspace.  If it is, then we know we shouldn\'t try to delete it.',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///9s='),(1004,1,'2010-03-12 18:41:49','P',1,'FWIW, this is nested way too deep.  Maybe some utility classes or helper methods at the outer class would help.',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///9U='),(1147,1,'2010-03-12 18:41:49','P',1,'Obviously this text needs to be externalized.',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///9w='),(1302,1,'2010-03-12 18:41:49','P',1,'Use Constants.DOT_GIT.\n\nBut actually if you want to test that a directory is a Git repository, use RepositoryCache.FileKey.isGitRepository().',NULL,344,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAAAGn///9Y='),(105,4,'2010-03-17 00:03:57','P',1,'style nit: we don\'t use curly braces for single line blocks',NULL,351,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAAAGn///04='),(107,4,'2010-03-17 00:03:57','P',1,'typo: s/contains/contain/',NULL,351,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAAAGn///08='),(117,4,'2010-03-17 00:03:57','P',1,'typo: s/three/tree/',NULL,351,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAAAGn///1A='),(115,4,'2010-03-17 00:03:57','P',1,'typo: s/three/tree/',NULL,351,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAAAGn///1E='),(108,44,'2010-03-31 14:05:59','P',1,'The tree already expands on double click. This code then reverts the expansion (Tested on Windows).',NULL,351,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAAAAn////M='),(458,46,'2010-04-08 09:42:47','P',1,'See above',NULL,351,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAAAA3///14='),(109,46,'2010-04-08 09:42:47','P',1,'Do we really need this? Expand on right-arrow does work for me already.',NULL,351,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAAAA3///18='),(796,1,'2010-03-17 00:30:49','P',1,'Please combine with the parent if statement, to reduce a level of nesting.',NULL,354,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAGn///0g='),(809,1,'2010-03-17 00:30:49','P',1,'Please combine with the parent if statement, to reduce a level of nesting.',NULL,354,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAGn///0k='),(810,1,'2010-03-17 00:30:49','P',1,'Like above, but you should do:\n\n  throw new MissingObjectException(o, o.getType());',NULL,354,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAGn///0o='),(797,1,'2010-03-17 00:30:49','P',1,'Instead of reject(...), just do what we do in the missing blob case below:\n\n  throw new MissingObjectException(c, Constants.TYPE_COMMIT);\n\nThe caller is required to catch and handle this by reporting errors already.  So you don\'t need to add your own reject method below.',NULL,354,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAGn///0s='),(787,1,'2010-03-17 00:51:51','P',1,'If ensureObjectsProvidedVisible is true I think we also need to do something to verify the user can \"see\" the base objects they have used in the pack file.  I failed to really give you a way to implement that as part of this method.\n\nIn theory, given how the send-pack/receive-pack protocol works in Git, the base objects *must* have been marked as UNINTERESTING above during the markUninteresting calls.  Therefore I think we can do this here:\n\n  for (ObjectId id : getBaseObjectIds()) {\n    RevObject b = ow.lookupAny(id);\n    if (!b.has(RevFlag.UNINTERESTING))\n      throw new MissingObjectException(b, b.getType());\n  }',NULL,354,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAGn///0U='),(759,1,'2010-03-17 00:30:49','P',1,'Must be needNewObjectIds || ensureObjectsProvidedVisible',NULL,354,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAGn///0w='),(760,1,'2010-03-17 00:51:51','P',1,'Must be needBaseObjectIds || ensureObjectsProvidedVisible.',NULL,354,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAGn///0Y='),(787,1,'2010-03-18 01:26:40','P',1,'The thing is, lookupAny(id, int) is safe, because if the object didn\'t exist in the walk before this point, it will be added, but we will discover the UNINTERESTING flag is missing and immediately abort with the exception.  So yea, the walk is polluted for a short period with an assumption of an object of a certain type... but it won\'t have the flag.\n\nI\'d rather not change the API of RevWalk right now just to implement this feature.  I\'m too afraid we might be forced to live with that new method forever, and its semantics.  So just use lookupAny(id, Constants.OBJ_BLOB) here and accept that the walk gets partially polluted right before the crash.','AAAAHH////Y=',354,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAHH////M='),(787,31,'2010-03-18 00:00:29','P',1,'Good point. I don\'t think that this code works, though, because there is no way to get a plain RevObject from the RevWalk. I looked at lookupAny(id, int), and it doesn\'t seem safe to call it and assume that this is a RevBlob or something else, because that ends up adding it to the revwalk.\n\nI\'ve added another method that does something which I think is safer. Let me know what you think.','AAAAGn///0U=',354,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java','AAAAHH////Y='),(36,44,'2010-03-17 13:54:39','d',1,'Done','AAAAGn///zI=',361,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/internal/util/ProjectUtil.java','AAAAG3////0='),(36,3,'2010-03-17 10:14:54','P',1,'We should put a child monitor here, set it to the number of units of work that the project has, and do \'worked\' for each one of them.',NULL,361,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/internal/util/ProjectUtil.java','AAAAGn///zI='),(801,46,'2010-03-31 20:02:26','P',1,'Removed','AAAAAn////A=',371,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java','AAAAA3////0='),(660,46,'2010-03-31 20:02:26','P',1,'Done','AAAAAn///+8=',371,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java','AAAAA3////4='),(801,6,'2010-03-31 10:32:11','P',1,'Why do we need this?',NULL,371,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java','AAAAAn////A='),(660,6,'2010-03-31 10:32:11','P',1,'Could we sort in an existing one in such a way that it appears on top of the list?',NULL,371,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java','AAAAAn///+8='),(7,4,'2010-03-25 23:34:57','P',0,'this shouldn\'t have been changed',NULL,373,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceAdapter.java','AAAAHX///64='),(15,4,'2010-06-05 23:05:55','d',1,'start sentence with uppercase',NULL,376,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/handlers/RepositoryActionHandler.java','AAALu3///uU='),(1,4,'2010-06-05 23:05:25','d',1,'missing license header',NULL,376,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/handlers/RepositoryActionHandler.java','AAALu3///uY='),(60,11,'2010-03-19 08:02:00','P',1,'Is it a cosmetic change? I see no difference instead of moving same lines.',NULL,378,1,'org.eclipse.jgit.packaging/org.eclipse.jgit.updatesite/pom.xml','AAAAHX////o='),(60,1,'2010-03-19 14:12:12','P',1,'I moved the tag because it has no semantic difference to be earlier in the file, but then I can have tools/version.sh update the first 3 <version> elements in the file and skip the 4th, which is the version of the maven-assembly-plugin below.','AAAAHX////o=',378,1,'org.eclipse.jgit.packaging/org.eclipse.jgit.updatesite/pom.xml','AAAAHX///+4='),(1,4,'2010-03-19 19:31:56','P',1,'license header is missing',NULL,384,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/ConfigureKeysDialog.java','AAAAHX///98='),(1,4,'2010-03-19 19:31:56','P',1,'license header is missing',NULL,384,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/ConfigureRemoteWizard.java','AAAAHX///94='),(1,4,'2010-03-19 19:31:56','P',1,'license header is missing',NULL,384,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySource.java','AAAAHX///+A='),(1,4,'2010-03-19 19:31:56','P',1,'license header is missing',NULL,384,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySourceProvider.java','AAAAHX///90='),(1,4,'2010-03-19 19:31:56','P',1,'license header is missing',NULL,384,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryRemotePropertySource.java','AAAAHX///9w='),(1,4,'2010-03-19 19:31:56','P',1,'license header is missing',NULL,384,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryTreeNode.java','AAAAHX///9s='),(1,4,'2010-03-19 19:31:56','P',1,'license header is missing',NULL,384,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryViewUITexts.java','AAAAHX///9o='),(1,4,'2010-03-19 19:31:56','P',1,'license header is missing',NULL,384,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/SelectRemoteNamePage.java','AAAAHX///9k='),(62,1,'2010-03-22 20:35:19','P',1,'What about the following cases:\n\n \"Me <me@example.com>\"\n \"<>\"\n \"\"\n \" <>\"',NULL,394,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/RawParseUtils_MiscTest.java','AAAAHX///70='),(57,1,'2010-03-22 20:35:19','P',1,'Would making this date a constant reduce the complexity of each of these tests?',NULL,394,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/RawParseUtils_MiscTest.java','AAAAHX///74='),(71,1,'2010-03-22 20:35:19','P',1,'Please use an explicit character encoding here to prevent odd platform defaults from breaking tests.  ISO-8859-1 or UTF-8 should be suitable for this test given the inputs above.',NULL,394,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/RawParseUtils_MiscTest.java','AAAAHX///78='),(53,51,'2010-03-23 07:54:54','d',1,'I will do so, though RawParseUtils has some more functionality which could be tested (maybe it never will) and having a test class for every function seems to me a bit excessive.','AAAAHX///7k=',394,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/RawParseUtils_MiscTest.java','AAAAHX///7c='),(53,8,'2010-03-23 00:53:54','P',1,'Since this simply is about testing PersonIdent, please name this class accordingly.',NULL,394,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/RawParseUtils_MiscTest.java','AAAAHX///7k='),(56,8,'2010-03-23 00:53:54','P',1,'If you use Ecplise, use it\'s formatting capabilities. We have the settings for these\nthings in the projects.','AAAAHX///8A=',394,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/RawParseUtils_MiscTest.java','AAAAHX///7o='),(56,1,'2010-03-22 20:35:19','P',1,'Please put spaces after commas, and line-wrap closer to 80 characters.',NULL,394,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/RawParseUtils_MiscTest.java','AAAAHX///8A='),(2,1,'2010-03-22 20:35:19','P',1,'Please update the copyright statement to be accurate.',NULL,394,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/RawParseUtils_MiscTest.java','AAAAHX///8E='),(417,1,'2010-04-11 02:18:11','P',1,'This code is complex enough that it might justify a new top level method, rather than being buried down within a selection listener.',NULL,395,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAAAA3///xo='),(442,1,'2010-04-11 02:18:11','P',1,'You need to check the result to make sure it was actually created.',NULL,395,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAAAA3///xs='),(425,1,'2010-04-11 02:18:11','P',1,'This TODO obviously needs to be addressed before submitting the change.  Ideally the text would be obtained at the same time as the tag name, so another field in the same dialog.',NULL,395,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAAAA3///xw='),(1,2,'2010-03-29 13:42:23','P',1,'You may consider putting comments in this file to describe the type of output... but it is pretty evident by the name.',NULL,397,1,'org.eclipse.egit.core/.options','AAAAAX////c='),(1,46,'2010-03-29 14:10:10','P',1,'Good idea. Added to patch set 2.','AAAAAX////c=',397,1,'org.eclipse.egit.core/.options','AAAAAX////M='),(31,2,'2010-03-29 13:42:23','P',1,'Do we really intend on this package being API?\n\nTracing seems to be something internal to the EGit plug-in.',NULL,397,1,'org.eclipse.egit.ui/META-INF/MANIFEST.MF','AAAAAX////g='),(31,46,'2010-03-29 14:10:10','P',1,'This is the import. The export in the EGit core plug-in is internal in fact, only allowing EGit UI to see this package.','AAAAAX////g=',397,1,'org.eclipse.egit.ui/META-INF/MANIFEST.MF','AAAAAX////I='),(80,44,'2010-04-07 16:21:47','P',1,'I think the trow was just forgotten here and could be added (surrounding method throws CoreExecption).',NULL,503,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitQuickDiffProvider.java','AAAAA3///3o='),(403,46,'2010-04-06 14:41:52','P',1,'Method removed in next patch set. I did not change the project settings whatsoever, but since this (in 3.5) overrides an interface method, it was not marked as error.','AAAAA3///8Y=',508,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/Activator.java','AAAAA3///68='),(44,46,'2010-04-06 14:41:52','P',1,'Done','AAAAA3///8U=',508,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/Activator.java','AAAAA3///7A='),(44,8,'2010-04-03 16:21:07','P',1,'DebugOptionsListener is not available in Eclipse 3.4',NULL,508,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/Activator.java','AAAAA3///8U='),(403,8,'2010-04-03 16:19:20','P',1,'We want javadoc for all public methods and fields. \nOur project settings should give you an error here.',NULL,508,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/Activator.java','AAAAA3///8Y='),(11,15,'2010-04-01 11:30:40','P',1,'Perhaps you mean internal?',NULL,508,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/nternal/trace/GitTraceLocation.java','AAAAA3///+s='),(67,46,'2010-04-06 14:41:52','P',1,'Done','AAAAA3///8k=',508,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/nternal/trace/GitTraceLocation.java','AAAAA3///6o='),(54,46,'2010-04-06 14:41:52','P',1,'Done','AAAAA3///8g=',508,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/nternal/trace/GitTraceLocation.java','AAAAA3///6s='),(11,46,'2010-04-06 14:41:52','P',1,'Absolutely.','AAAAA3///+s=',508,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/nternal/trace/GitTraceLocation.java','AAAAA3///6w='),(54,8,'2010-04-03 15:33:11','P',1,'DebugTrace is not available in Eclipse 3.4',NULL,508,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/nternal/trace/GitTraceLocation.java','AAAAA3///8g='),(67,8,'2010-04-03 15:33:11','P',1,'DebugTrace is not available in Eclipse 3.4',NULL,508,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/nternal/trace/GitTraceLocation.java','AAAAA3///8k='),(16,46,'2010-04-08 06:50:24','P',1,'Done','AAAAA3///3E=',508,4,'org.eclipse.egit.core/src/org/eclipse/egit/core/internal/trace/DebugTrace.java','AAAAA3///2Y='),(16,8,'2010-04-07 19:37:47','P',1,'insert empty line here',NULL,508,4,'org.eclipse.egit.core/src/org/eclipse/egit/core/internal/trace/DebugTrace.java','AAAAA3///3E='),(35,8,'2010-04-07 19:37:47','P',1,'CRLF line endings',NULL,508,4,'org.eclipse.egit.core/src/org/eclipse/egit/core/internal/trace/GitTraceLocation.java','AAAAA3///3I='),(16,46,'2010-04-08 06:50:24','P',1,'Done','AAAAA3///3M=',508,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/trace/DebugTrace.java','AAAAA3///2U='),(16,8,'2010-04-07 19:37:47','P',1,'insert blank line here',NULL,508,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/trace/DebugTrace.java','AAAAA3///3M='),(92,46,'2010-04-08 06:50:24','P',1,'Done','AAAAA3///3Q=',508,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/trace/GitTraceLocation.java','AAAAA3///2M='),(18,46,'2010-04-08 06:50:24','P',1,'Done','AAAAA3///3U=',508,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/trace/GitTraceLocation.java','AAAAA3///2Q='),(92,8,'2010-04-07 19:37:47','P',1,'uncessary empty line',NULL,508,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/trace/GitTraceLocation.java','AAAAA3///3Q='),(18,8,'2010-04-07 19:37:47','P',1,'Extrra empty comment line.\nThis file has CRLF line endings',NULL,508,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/trace/GitTraceLocation.java','AAAAA3///3U='),(17,46,'2010-04-08 06:50:24','P',1,'Done','AAAAA3///3Y=',508,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/trace/ITraceLocation.java','AAAAA3///2I='),(17,8,'2010-04-07 19:37:47','P',1,'extra empty line here.\n\nI addition this file has CRLF line endings',NULL,508,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/trace/ITraceLocation.java','AAAAA3///3Y='),(241,8,'2010-04-06 17:30:36','P',1,'Ever since we adopted Java 5 we have  adopted generics in general. I guess this case \ncould be an exception...','AAAAA3///6c=',515,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/project/GitProjectData.java','AAAAA3///5g='),(241,44,'2010-04-06 15:05:40','P',1,'Why is hard to read generic coding used here?',NULL,515,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/project/GitProjectData.java','AAAAA3///6c='),(24,11,'2010-04-03 19:22:41','P',1,'Does it prevent EGit from installing on Galileo because it has 0.1.41 and not 0.1.37? What about using \'[0.1.37,0.2.0)\'?',NULL,516,1,'org.eclipse.egit.ui/META-INF/MANIFEST.MF','AAAAA3///8M='),(12,11,'2010-04-03 19:27:22','P',1,'\'[0.1.37,0.2.0)\'?',NULL,517,1,'org.eclipse.jgit.console/META-INF/MANIFEST.MF','AAAAA3///8E='),(13,11,'2010-04-03 20:38:00','d',1,'Please put this back right after org.eclipse.jgit.lib.',NULL,517,2,'org.eclipse.jgit.ui/META-INF/MANIFEST.MF','AAAAA3///78='),(308,1,'2010-04-07 12:49:10','P',1,'Not necessarily a blob.',NULL,523,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectWriter.java','AAAAA3///4M='),(309,1,'2010-04-07 12:49:10','P',1,'This isn\'t necessarily a blob, is it?',NULL,523,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectWriter.java','AAAAA3///4Q='),(304,1,'2010-04-07 12:49:10','P',1,'s/am/an/',NULL,523,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectWriter.java','AAAAA3///4U='),(59,1,'2010-04-07 12:49:10','P',1,'Clean shouldn\'t be necessary in JGit.  Its required in the C hook script because we are presented with the *original* buffer from the user, before its been cleaned up by the commit creation routine.  So there we need to drop lines leading with #, etc.  But within JGit that should all happen in the higher level UI before that UI invokes the ChangeIdUtil class.  (Or simply not need to happen at all.)',NULL,523,3,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAAAA3///34='),(107,1,'2010-04-07 12:49:10','P',1,'I wouldn\'t bother with the temporary sha1 variable here.  Also, b.length() is not the same size as the number of bytes available for hashing.  If the name contains a multi-byte character for example, with UTF-8 encoding we won\'t consider everything in the hash.',NULL,523,3,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAAAA3///38='),(120,1,'2010-04-07 14:35:07','P',1,'I would prefer running this through the parser that RevCommit uses when parsing footer lines.  Unfortunately that code is part of RevCommit.  So we would need to pull it out into a utility class, or find a way to construct a RevCommit from the buffered message so we can reuse that parser.  But even if we don\'t do that, you can search backwards from the end of the string to find the paragraph break that denotes the \"footer\" and then insert there.  But at that point, we\'re mostly replicating that parsing code.\n\nIn particular one of the rules we do in the shell hook is, we try to insert the Change-Id line after the Bug line, if one is present, but before any other lines.  That\'s hard to do with a simple regex replaceAll like you are doing here to insert the item into the string.',NULL,523,3,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAAAA3///3w='),(101,1,'2010-04-07 12:49:10','P',1,'This temporary file is not necessary.',NULL,523,3,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAAAA3///4A='),(70,1,'2010-04-07 12:49:10','P',1,'I think I would prefer the treeId to come first.  It comes first in the commit formatting, and in the change-id string computation.',NULL,523,3,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAAAA3///4E='),(55,1,'2010-04-07 12:49:10','P',1,'Its spelled \"Gerrit Code Review\".',NULL,523,3,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAAAA3///4I='),(52,8,'2010-05-14 20:53:47','P',1,'Ah, I was thinking about the implementation. Didn\'t read you message accurately.','AAALun///ho=',523,5,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/ChangeIdUtilTest.java','AAALun///hc='),(52,1,'2010-05-14 18:18:41','P',1,'That\'s what I meant, we can relicense the test cases for the commit-msg hook.  Its just test vector data.  Google would prefer to have a consistent set of test data used to validate conformance than to worry about keeping APLv2 on this code.','AAALun///hw=',523,5,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/ChangeIdUtilTest.java','AAALun///ho='),(52,8,'2010-05-14 18:03:10','P',1,'I didn\'t even think of looking there. \nCan\'t I st^H^Hborrow the tests too?','AAALun///iU=',523,5,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/ChangeIdUtilTest.java','AAALun///hw='),(52,1,'2010-05-14 00:40:06','P',1,'Ugh.\n\nWe can relicense Gerrit Code Review\'s CommitMsgHookTest class from APLv2 to EDL.  Please see if you can reuse that test class by altering how it executes the hook logic, but otherwise retain its input-output examples and test to that.  Just tag it copyright Google 2009.\n\nhttp://android.git.kernel.org/?p=tools/gerrit.git;a=blob;f=gerrit-server/src/test/java/com/google/gerrit/server/tools/hooks/CommitMsgHookTest.java;hb=HEAD',NULL,523,5,'org.eclipse.jgit.test/tst/org/eclipse/jgit/util/ChangeIdUtilTest.java','AAALun///iU='),(165,8,'2010-05-14 18:03:10','P',1,'Do match what the commit-msg I got from Gerrit hook does. \n\nI was thinking about making this implementation diverge from the hook since it makes little sense skip the blankt lines','AAALun///iY=',523,5,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAALun///h8='),(165,8,'2010-05-14 20:53:47','P',1,'I generated the JUnit test by committing into a test with the (shell) commit hook installed repo and found this behavior.\n\nThis code skips multiple blank lines, not single ones.','AAALun///hk=',523,5,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAALun///hg='),(165,1,'2010-05-14 18:18:41','P',1,'I\'m still not following you here.  The commit-msg hook in Gerrit doesn\'t skip blank lines when its putting the message back together.  We put blank lines in commit messages all of the time, like between paragraphs.  Like you do in this message.  Why would we skip them?','AAALun///h8=',523,5,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAALun///hk='),(140,1,'2010-05-14 00:40:06','P',1,'This should only match when firstPattern == -1.  That is, we want to find the *last* Bug: or Issue: line and insert the Change-Id immediately after it.  Here you are going to insert it after the first.  Correct output would be:\n\n  Bug: 42\n  Bug: 53\n  Bug: 59\n  Change-Id: I....\n  Signed-off-by: Shawn ...\n\nThat\'s why I do this as two loops in the canonical hook.  We loop backwards to find the end of the footers, and then loop forwards to find the Change-Id insertion point.  Given that its only a couple of indexes, walking backwards then forwards in the data is very inexpensive.',NULL,523,5,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAALun///ic='),(153,1,'2010-05-14 00:40:06','P',1,'This code would be a lot easier to follow if you just initialize lastPattern = lines.lenght at the start, rather than -1.',NULL,523,5,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAALun///ig='),(120,1,'2010-05-14 00:40:06','P',1,'Can\'t you factor out the ^$ to the start and end of the pattern?\n\nThe canonical hook also considers lines starting with a space to be a footer, because these are often continuation lines of the prior line.',NULL,523,5,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAALun///ik='),(111,1,'2010-05-14 00:40:06','P',1,'If you just do \"return w.computeObjectSha1...\" you might be able to fit the entire method call on one line and won\'t need to wrap the \"is);\" onto the next line.  If its still too long, consider \"raw\" or \"bin\" instead of \"bytes\" for the encoded form of the commit text.',NULL,523,5,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAALun///io='),(117,1,'2010-05-14 00:40:06','P',1,'The canonical hook in Gerrit Code Review does this as a case-insensitive match for Bug|Issue.',NULL,523,5,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAALun///is='),(133,1,'2010-05-14 00:40:06','P',1,'Case insensitive form is honored by Gerrit Code Review and by the commit-msg hook it comes with.  Should we use a case insensitive match here too?',NULL,523,5,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAALun///iw='),(165,1,'2010-05-14 00:40:06','P',1,'Why are you skipping empty lines in the user\'s message?\n\nAll indexes of lines up to the chosen insertion point of the Change-Id should be copied as-is.  Since split(\"\\n\") removed the \\n characters, we have to add those back in between each element.  But that\'s it.',NULL,523,5,'org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java','AAALun///iY='),(7,1,'2010-06-05 01:28:15','P',1,'Why are we updating our JVM standard to 1.6 for the unit tests?',NULL,523,6,'org.eclipse.jgit.test/.classpath','AAALu3///ws='),(215,11,'2010-04-07 04:07:02','P',1,'ObjectId parentId = null;\n\nand remove this else',NULL,524,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CommitAction.java','AAAAA3///40='),(360,11,'2010-04-07 04:07:02','P',1,'Please provide a constant at least for\n\n   Text.DELIMITER + \"Change-Id: \"\n\nor even for full Change-Id string like this\n\n   Text.DELIMITER + \"Change-Id: \" + CHANGE_ID_REGEX',NULL,524,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java','AAAAA3///4w='),(145,44,'2010-04-12 09:44:37','d',1,'Done','AAAAA3///xE=',528,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/FileBasedConfig.java','AAAAA3///vs='),(118,44,'2010-04-12 09:44:32','d',1,'Done','AAAAA3///xI=',528,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/FileBasedConfig.java','AAAAA3///vw='),(145,1,'2010-04-11 02:38:37','P',1,'You can get this data from LockFile.  Before we call lf.write above, add this line:\n\n  lf.setNeedStatInformation(true);\n\nThen after lf.commit() was successful you can use:\n\n  lastModified = lf.getCommitLastModified()',NULL,528,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/FileBasedConfig.java','AAAAA3///xE='),(118,1,'2010-04-11 02:38:37','P',1,'We prefer to cache the modification time before we read the file.  That way if the file is modified while we are scanning it, our cached time should be older than the final edit time, and we\'ll scan it again the next time we are asked about the file.\n\nCaching the time after the read opens a race condition where we finish reading the old version, and someone else changes the file before we can get the modification time from it.  In this case we would skip that update entirely and never notice it has occurred.',NULL,528,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/FileBasedConfig.java','AAAAA3///xI='),(335,44,'2010-04-12 09:43:58','d',1,'Done','AAAAA3///xA=',528,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAAAA3///v0='),(335,1,'2010-04-11 02:38:37','P',1,'Locking the configuration shouldn\'t be necessary.\n\nFileBasedConfig extends from Config, and Config is thread-safe via atomic references.  So you just need to determine if either file needs to be refreshed, and if so, run its load() method again to pull it in from disk.',NULL,528,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAAAA3///xA='),(341,46,'2010-04-08 06:14:07','P',1,'Above we use\nsetPageComplete(!getCheckedProjects().isEmpty());\nso in terms of clarity, it might be good to refactor this into some checkPage() method and call this from the different places where the page completion flag is set.',NULL,531,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitProjectsImportPage.java','AAAAA3///20='),(233,46,'2010-04-08 06:14:07','P',1,'This should probably be \n\nsetPageComplete(!getCheckedProjects().isEmpty());\n\n?',NULL,531,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitProjectsImportPage.java','AAAAA3///24='),(653,46,'2010-04-08 06:14:07','P',1,'for single lines, we do not want to have brackets',NULL,531,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitProjectsImportPage.java','AAAAA3///2o='),(652,46,'2010-04-08 06:14:07','P',1,'for single lines, we do not want to have brackets',NULL,531,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitProjectsImportPage.java','AAAAA3///2s='),(405,46,'2010-04-08 06:14:07','P',1,'See above',NULL,531,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitProjectsImportPage.java','AAAAA3///2w='),(63,44,'2010-04-16 09:21:21','P',1,'workaround should no longer be required.',NULL,533,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CompareWithHeadAction.java','AAAAA3///qk='),(1,4,'2010-04-25 22:32:25','P',1,'missing license header',NULL,534,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/SelectUriWiazrd.java','AAAAA3///X4='),(11,4,'2010-04-25 22:32:25','P',1,'typo in class name',NULL,534,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/SelectUriWiazrd.java','AAAAA3///X8='),(67,63,'2010-05-01 01:08:33','P',1,'SubMonitor is preferred over SubProgressMonitor.',NULL,544,4,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALuX///5I='),(68,63,'2010-05-01 01:08:33','P',1,'This monitor.worked(1) line is unnecessary. Just allocate three units of work and split up as 1-1-1. The code right now makes it seem like 1-1-2.',NULL,544,4,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALuX///5M='),(56,63,'2010-05-01 01:08:33','P',1,'This entire block should be wrapped in a try/finally with a monitor.done() invocation in the finally block.',NULL,544,4,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALuX///5Q='),(68,49,'2010-05-04 22:22:44','P',1,'Done','AAALuX///5M=',544,4,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALuX///yM='),(67,49,'2010-05-04 22:22:44','P',1,'Done','AAALuX///5I=',544,4,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALuX///yQ='),(56,49,'2010-05-04 22:22:44','P',1,'Done','AAALuX///5Q=',544,4,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALuX///yU='),(34,49,'2010-05-04 22:22:44','P',1,'I\'ll replace IWorkspaceRunnable with IEGitOperation interface in next commit.',NULL,544,4,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALuX///yY='),(112,63,'2010-05-01 01:08:33','P',1,'Use the StatusManager to show this error.',NULL,544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALuX///4k='),(99,63,'2010-05-01 01:08:33','P',1,'Is there a particular reason why a job isn\'t used instead?',NULL,544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALuX///5E='),(99,49,'2010-05-04 22:22:44','P',1,'No, I\'ve just taken this section from old version of BranchOperation, I\'ll reimplement it using job.\n\nDone.','AAALuX///5E=',544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALuX///yI='),(117,63,'2010-05-05 11:45:12','P',1,'With auto activation characters set you can still get that behaviour but that\'s a bit of [tedious] work. I\'m not going to bother pushing for this as it\'s not important to me.','AAALuX///yA=',544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun////Y='),(131,63,'2010-05-01 01:08:33','P',1,'Use org.eclipse.core.runtime.Assert.isNotNull(revCommit).',NULL,544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALuX///48='),(106,63,'2010-05-01 01:08:33','P',1,'You really don\'t want to use the same style for yourself and the combo. This is asking for trouble. Either use it only for one or make two parameters.',NULL,544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALuX///4c='),(117,63,'2010-05-01 01:08:33','P',1,'You probably want to use a ContentAssistCommandAdapter instead. Then Ctrl+Space should work.',NULL,544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALuX///5A='),(131,49,'2010-05-04 22:22:44','P',1,'Done','AAALuX///48=',544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALuX///x8='),(117,49,'2010-05-04 22:22:44','P',1,'To be honest I prefer to have list of suggestion immediately after typing without pressing Ctrl+Space, but I\'m open for any discussion what behavior would be more useful.','AAALuX///5A=',544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALuX///yA='),(106,49,'2010-05-04 22:22:44','P',1,'Done','AAALuX///4c=',544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALuX///yE='),(147,63,'2010-05-01 01:08:33','P',1,'Dialogs block on open by default.\n\nThis dialog should be resizable.',NULL,544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALuX///40='),(261,63,'2010-05-01 01:08:33','P',1,'You do not want to do this. That means I can just check the \'Overwrite\' button and then the \'OK\' button gets enabled which allows the user to create a tag with an empty string. You need to perform input validation.\n\nAlso, if I\'m overwriting a tag, the dialog still says \"Already exists\".',NULL,544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALuX///44='),(284,63,'2010-05-01 01:08:33','P',1,'I\'m not sure if \"Details\" is really the best word here. The dialog isn\'t showing me more details. It\'s showing me existing tags. It also feels confusing to me that there\'s both \"Advanced\" and \"Details\".',NULL,544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALuX///4o='),(405,63,'2010-05-01 01:08:33','P',1,'This seems counterintuitive. I\'m not sure I agree with this behaviour of hiding on double-click.',NULL,544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALuX///4s='),(304,63,'2010-05-01 01:08:33','P',1,'Is there a particular reason as to why we need to dispose/recreate it repeatedly?',NULL,544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALuX///4w='),(90,63,'2010-05-01 01:08:33','P',1,'I\'m not sure if we\'re really gaining anything here by implementing IWorkbenchAdapter and IAdaptable. Are you planning to expand on this idea ?',NULL,544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALuX///4Y='),(90,49,'2010-05-04 22:22:44','P',1,'You are right here IAdaptable interface is useless here, but I\'ll keep IWorkbenchAdapter implemented because when it is removed list of tags is empty.','AAALuX///4Y=',544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALuX///x0='),(147,49,'2010-05-04 22:22:44','P',1,'Done','AAALuX///40=',544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALuX///x4='),(405,49,'2010-05-04 22:22:44','P',1,'When I first think about this \"feature\" it seems to me quite fancy. But right now I agree with you that this is a strange behavior. I\'ll remove it.','AAALuX///4s=',544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALuX///xg='),(304,49,'2010-05-04 22:22:44','P',1,'No, I was thinking that this can free some used resources eg. file handler or sth. But if it doesn\'t I\'ll remove it.','AAALuX///4w=',544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALuX///xk='),(284,49,'2010-05-04 22:22:44','P',1,'This \"Details pattern\" is taken from eclipse\'s CVS tag dialog, but this can be changed. Maybe list of existing tags should be always visible in tag dialog as Matthias suggest it; this should be discussed.','AAALuX///4o=',544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALuX///xo='),(261,49,'2010-05-04 22:22:44','P',1,'Good point! This should be rethink as well as validation.','AAALuX///44=',544,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALuX///xs='),(41,49,'2010-05-07 15:21:05','P',1,'I\'ve replace it with org.eclipse.jface.dialogs.MessageDialog','AAALun///5E=',544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALun///3s='),(41,8,'2010-05-07 11:36:09','P',1,'We should avoid internal classes from other modules',NULL,544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALun///5E='),(185,8,'2010-05-07 11:36:09','P',1,'?',NULL,544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///40='),(106,8,'2010-05-07 11:36:09','P',1,'SWT style bits?',NULL,544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///44='),(185,49,'2010-05-07 11:54:52','P',1,'Done','AAALun///40=',544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///4A='),(176,49,'2010-05-07 11:54:52','P',1,'Done','AAALun///5A=',544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///4E='),(106,49,'2010-05-07 11:54:52','P',1,'Yes','AAALun///44=',544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///4I='),(176,8,'2010-05-07 11:36:09','P',1,'Only @return needed',NULL,544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///5A='),(166,49,'2010-05-07 11:54:52','P',1,'Done','AAALun///4o=',544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///30='),(156,49,'2010-05-07 11:54:52','P',1,'Done','AAALun///4s=',544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///34='),(147,49,'2010-05-07 11:54:52','P',1,'Done','AAALun///4w=',544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///38='),(166,8,'2010-05-07 11:36:09','P',1,'....',NULL,544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///4o='),(156,8,'2010-05-07 11:36:09','P',1,'double...',NULL,544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///4s='),(147,8,'2010-05-07 11:36:09','P',1,'double javadoc',NULL,544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///4w='),(584,49,'2010-05-07 15:21:05','P',1,'It isn\'t also related with UI so that it can be moved into UIUtils. Maybe in this case we should create new utility class called ValidationUtils ? What do you think ?','AAALun///5I=',544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/SWTUtils.java','AAALun///3E='),(584,8,'2010-05-07 11:36:09','P',1,'This methods is not SWT-related and thus does not belong in a class called SWTUtils',NULL,544,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/SWTUtils.java','AAALun///5I='),(77,8,'2010-05-08 20:33:48','P',1,'Hmm. do we log tags? Probably a good idea but C Git doesn\'t.',NULL,544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///04='),(52,8,'2010-05-08 20:33:48','P',1,'refName is redundant. Use local variablesl later on if necessary',NULL,544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///08='),(84,8,'2010-05-08 20:33:48','P',1,'Some hint about why the operation failed would be nice to the user.',NULL,544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///0w='),(50,8,'2010-05-08 20:33:48','P',1,'tagName is redundant.  Use local variablesl later on if necessary',NULL,544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///1A='),(45,8,'2010-05-08 20:33:48','P',1,'\"<code>true</code> top replace existing tag with same name',NULL,544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///1E='),(42,8,'2010-05-08 20:33:48','P',1,'We usually write something trivial nice looking here. \"Construct TagOperation\" or something very brief',NULL,544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///1I='),(31,8,'2010-05-08 20:33:48','P',1,'nitpick: extra empy line',NULL,544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///1M='),(84,49,'2010-05-09 18:45:39','P',1,'Done','AAALun///xQ=',544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///wY='),(84,8,'2010-05-09 08:24:36','P',1,'the name of the result is better than nothing','AAALun///yo=',544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///xQ='),(77,49,'2010-05-08 23:17:25','P',1,'Right, if C Git doesn\'t log that we also shouldn\'t.\nLine removed.\nDone.','AAALun///04=',544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///y0='),(84,49,'2010-05-08 23:17:25','P',1,'Yes, it would be nice, but right now I don\'t see simple solution to achieve that. Here we have only enum value without any \'human readable\' message.','AAALun///0w=',544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///yo='),(52,49,'2010-05-08 23:17:25','P',1,'Done','AAALun///08=',544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///zA='),(50,49,'2010-05-08 23:17:25','P',1,'Done','AAALun///1A=',544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///zE='),(45,49,'2010-05-08 23:17:25','P',1,'Done','AAALun///1E=',544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///zI='),(42,49,'2010-05-08 23:17:25','P',1,'Done','AAALun///1I=',544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///zM='),(31,49,'2010-05-08 23:17:25','P',1,'Done','AAALun///1M=',544,6,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///zQ='),(25,8,'2010-05-09 08:24:36','P',1,'Here is the problem with the missing classes in 3.4.  This bundle is exported as 3.3.100 in Eclipse 3.4',NULL,544,6,'org.eclipse.egit.ui/META-INF/MANIFEST.MF','AAALun///w8='),(25,49,'2010-05-09 18:45:39','P',1,'Done','AAALun///w8=',544,6,'org.eclipse.egit.ui/META-INF/MANIFEST.MF','AAALun///ww='),(165,8,'2010-05-08 20:33:48','P',1,'Not sure what happens here. Hopes it makes sense to skip error handling',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALun///0M='),(64,49,'2010-05-09 18:45:39','P',1,'I can\'t agree with you, current repository state (see line 67) is attached to message content. So in this case we inform user what is wrong. But I\'m open for any proposition how we can do this better.','AAALun///xE=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALun///v8='),(136,49,'2010-05-09 18:45:39','P',1,'Done','AAALun///xI=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALun///wA='),(154,49,'2010-05-09 18:45:39','P',1,'Done','AAALun///xM=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALun///wE='),(64,8,'2010-05-09 08:24:36','P',1,'The underlying error is not displayed or logged.',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALun///xE='),(136,8,'2010-05-09 08:24:36','P',1,'The underlying error is not displayed or logged.',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALun///xI='),(154,8,'2010-05-09 08:24:36','P',1,'The underlying error is not displayed or logged.',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALun///xM='),(165,49,'2010-05-08 23:17:25','P',1,'Yes this piece of code is strange ... I\'ve removed this method.','AAALun///0M=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALun///yc='),(156,8,'2010-05-08 20:33:48','P',1,'index of item in check box',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///0c='),(147,8,'2010-05-08 20:33:48','P',1,'perhaps we should use revCommit.abbreviate() here, though it yields 8 digits',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///0g='),(143,8,'2010-05-08 20:33:48','P',1,'Does it have to be public?',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///0k='),(189,8,'2010-05-08 20:33:48','P',1,'Why not the more straightforward objectId == null? (this isn\'t C)',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///0U='),(147,8,'2010-05-09 08:24:36','P',1,'Ok','AAALun///yY=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///xA='),(143,49,'2010-05-08 23:17:25','P',1,'If we want to reuse this widget somewhere else then yes, it should be public.','AAALun///0k=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///yI='),(189,49,'2010-05-08 23:17:25','P',1,'OK','AAALun///0U=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///yQ='),(156,49,'2010-05-08 23:17:25','P',1,'Done','AAALun///0c=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///yU='),(147,49,'2010-05-08 23:17:25','P',1,'I don\'t want to mix up UI code with operation\'s on repository. Proposed revCommit.abbreviate() takes repository as a parameter so in this case I don\'t want to use it here. But we can substring commit SHA-1 to 8 characters instead of 6.','AAALun///0g=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///yY='),(64,49,'2010-05-08 20:15:40','P',1,'Good hint!\n\nThis is an \"old\" part from second or third patch set. Subclassing InputDialog give us only tag name validation and displaying message when it isn\'t valid. Now when this dialog is already complicated we can also implement validation not even for tag name but also for tag message.','AAALun///2A=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///00='),(55,8,'2010-05-08 20:33:48','P',1,'These three classes (above) are not in Eclipse 3.4',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///0I='),(145,49,'2010-05-08 20:15:40','P',1,'I\'m not quite sure does it should be resizable. We don\'t have here much data to present so that we need to resize this dialog to have better overview.','AAALun///2Q=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///1c='),(318,49,'2010-05-08 20:15:40','P',1,'I\'ll check that.','AAALun///2M=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///1g='),(368,49,'2010-05-08 20:15:40','P',1,'Done','AAALun///2E=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///1k='),(64,63,'2010-05-08 16:48:26','P',1,'I am not sure subclassing InputDialog for such a complicated user interface is such a great idea.',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///2A='),(368,63,'2010-05-08 16:48:26','P',1,'What is there to gain by introducing columns when there is only one column? See change 597 for a previous bug caused by the introduction of columns.',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///2E='),(318,63,'2010-05-08 16:48:26','P',1,'This has the same eager enablement problem that I described before.\n\n1. Make a tag.\n2. Select an existing tag.\n3. Check the \'Force replace existing tag.\' checkbox.\n4. Delete the name.\n5. Uncheck the \'Force replace existing tag.\' checkbox.\n6. Check the \'Force replace existing tag.\' checkbox.\n7. The \'OK\' button is now enabled, click it.\n\norg.eclipse.team.core.TeamException: Tag  creation failed\n	at org.eclipse.egit.core.op.TagOperation.updateRepo(TagOperation.java:83)\n	at org.eclipse.egit.core.op.TagOperation.execute(TagOperation.java:64)\n	at org.eclipse.egit.ui.internal.actions.TagAction$1.run(TagAction.java:111)\n	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///2M='),(145,63,'2010-05-08 16:48:26','P',1,'The dialog is not resizable.',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///2Q='),(55,49,'2010-05-09 18:45:39','P',1,'Done','AAALun///0I=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///ws='),(145,49,'2010-05-08 23:17:25','P',1,'In this case there should appear a scroll bar so that user can scroll list of existing tags.','AAALun///yg=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///yE='),(145,4,'2010-05-08 22:59:34','P',1,'I saw repositories with tons of tags, so the list of existing tags could be very long.','AAALun///1c=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///yg='),(64,49,'2010-05-08 23:17:25','P',1,'Done','AAALun///2A=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///zU='),(318,49,'2010-05-08 23:17:25','P',1,'Done','AAALun///2M=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///zY='),(689,49,'2010-05-08 20:15:40','P',1,'Done','AAALun///2I=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///1o='),(689,63,'2010-05-08 16:48:26','P',1,'Don\'t end with a period in this case.',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///2I='),(695,49,'2010-05-09 18:45:39','P',1,'Done','AAALun///xg=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///wc='),(693,49,'2010-05-09 18:45:39','P',1,'Done','AAALun///xk=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///wg='),(681,49,'2010-05-09 18:45:39','P',1,'Done','AAALun///xo=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///wk='),(679,49,'2010-05-09 18:45:39','P',1,'Done','AAALun///xs=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///wo='),(695,4,'2010-05-09 00:01:39','P',1,'s/filer/filter/',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///xg='),(693,4,'2010-05-09 00:01:39','P',1,'better: \nIn the advanced section you may choose the commit to be tagged.',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///xk='),(681,4,'2010-05-09 00:01:39','P',1,'s/occurs/occurred/',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///xo='),(679,4,'2010-05-09 00:01:39','P',1,'s/Tagging/tagging/',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///xs='),(51,8,'2010-05-08 20:33:48','P',1,'spelling: which',NULL,544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIUtils.java','AAALun///1Q='),(51,49,'2010-05-08 23:17:25','P',1,'Done','AAALun///1Q=',544,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIUtils.java','AAALun///yk='),(466,8,'2010-05-09 19:53:21','P',1,'isEmpty is not in Java 1.5',NULL,544,7,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///vg='),(466,49,'2010-05-09 22:21:37','P',1,'Right, done.','AAALun///vg=',544,7,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///vI='),(445,8,'2010-05-09 19:53:21','P',1,'isEmpty is not in Java 1.5',NULL,544,7,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///vk='),(445,49,'2010-05-09 22:21:37','P',1,'Right, done.','AAALun///vk=',544,7,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///vM='),(444,8,'2010-05-09 19:53:21','P',1,'isEmpty is not in Java 1.5',NULL,544,7,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///vo='),(444,49,'2010-05-09 22:21:37','P',1,'Right, done.','AAALun///vo=',544,7,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///vQ='),(104,44,'2010-05-11 11:14:44','P',1,'Null is ok here because the operation does not change Eclipse resources.','AAALun///tU=',544,9,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///s4='),(2,4,'2010-05-11 13:55:32','d',1,'Typo ?  s/Darusz/Dariusz/',NULL,544,9,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///sk='),(104,49,'2010-05-10 23:47:59','P',1,'I\'m not quite sure what should be returned here...\n\nIs \'null\' value OK ?',NULL,544,9,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALun///tU='),(2,4,'2010-05-11 13:53:02','d',1,'Typo: s/Darusz/Dariusz/',NULL,544,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/TagAction.java','AAALun///sc='),(2,4,'2010-05-11 13:53:16','d',1,'Typo: s/Darusz/Dariusz/',NULL,544,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitCombo.java','AAALun///sY='),(2,4,'2010-05-11 13:53:54','d',1,'Typo? s/Darusz/Dariusz/',NULL,544,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///sU='),(2,4,'2010-05-11 13:56:02','d',1,'Typo? s/Darusz/Dariusz/',NULL,544,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ValidationUtils.java','AAALun///sg='),(47,1,'2010-04-15 01:42:08','P',1,'Tab here and on next line, but we use spaces only in our pom.xml files.',NULL,558,3,'org.eclipse.egit.ui.test/pom.xml','AAAAA3///tU='),(328,1,'2010-04-19 02:00:35','P',1,'I didn\'t want to do that here, because needNewObjectIds() is based on whether or not this field is non-null.  Assigning the new empty collection into newObjectIds would change the behavior of this class.  That violates the \"getter shouldn\'t change state\" rule that most programmers assume in Java.\n\nI\'m creating a new collection here, because we don\'t have a singleton that provides an empty map, because we don\'t have a concept of an immutable map.  And I didn\'t want to override the mutator methods to create an immutable singleton, because that would cause the JIT to be forced to assume a lot of these mutation methods need to be virtual dispatches rather than static, potentially resulting in slower runtime code.\n\nSo it seemed shorter to just alloc the new empty collection on each request.  They are pretty small, and we only do one call per ReceivePack execution anyway, so the amount of garbage is pretty low.','AAAAA3///ls=',572,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAA3///lk='),(328,8,'2010-04-18 18:47:19','P',1,'Shouldn\'t you assign this new instance to newObjectIds?',NULL,572,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/IndexPack.java','AAAAA3///ls='),(508,63,'2010-04-27 11:23:00','P',1,'I believe this is for \"regenerating\" the subscriber upon startup. You can see below at the moment I have set the \'persistent\' value to \'false\'. If it was \'true\', then it would be possible for a user to synchronize without going through the wizard. In that case, the framework would have to instantiate the class spec\'d here manually through reflection I believe.','AAAAA3///Qs=',577,1,'org.eclipse.egit.ui/plugin.xml','AAAAA3///QQ='),(508,6,'2010-04-27 08:18:49','P',1,'This seems to be the wrong class, it should be GitBranchSubscriberParticipant.\n\nInterestingly enough this works now with any String for this attribute. Do you know when this would be used?',NULL,577,1,'org.eclipse.egit.ui/plugin.xml','AAAAA3///Qs='),(54,6,'2010-04-27 08:18:49','P',1,'When I compare against another branch or commit, shouldn\'t that point to the common ancestor commit?',NULL,577,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitBranchResourceVariantTreeSubscriber.java','AAAAA3///Qo='),(531,49,'2010-05-19 03:42:15','P',1,'Done','AAALun///Xg=',577,3,'org.eclipse.egit.ui/plugin.xml','AAALun///V8='),(531,8,'2010-05-18 22:49:10','P',1,'Strange indentation here',NULL,577,3,'org.eclipse.egit.ui/plugin.xml','AAALun///Xg='),(90,49,'2010-05-19 03:42:15','P',1,'When we return getResource().getFullPath() \'Compare editor\' opens without our changes (it means that file that we want to review i owerwritten with base one).\n\nI\'ve removed that comments.','AAALun///Ws=',577,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitBlobResourceVariant.java','AAALun///Vs='),(90,4,'2010-05-18 23:10:31','P',1,'what is this commented out code good for ? Is this a TODO ?',NULL,577,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitBlobResourceVariant.java','AAALun///Ws='),(43,49,'2010-05-19 03:42:15','P',1,'Done','AAALun///XY=',577,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitFolderResourceVariant.java','AAALun///V4='),(43,8,'2010-05-18 22:49:10','P',1,'No need for the *31 here.',NULL,577,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitFolderResourceVariant.java','AAALun///XY='),(65,49,'2010-05-19 03:42:15','P',1,'Done','AAALun///XM=',577,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitResourceVariantComparator.java','AAALun///V0='),(65,8,'2010-05-18 22:49:10','P',1,'I think you should close the stream, both for the normal case, as well as for errors (finally)',NULL,577,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitResourceVariantComparator.java','AAALun///XM='),(257,49,'2010-05-19 03:42:15','P',1,'Done','AAALun///W4=',577,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitResourceVariantTree.java','AAALun///Vw='),(257,8,'2010-05-18 22:49:10','P',1,'// TODO or actually nothing \"to do\" here',NULL,577,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitResourceVariantTree.java','AAALun///W4='),(713,4,'2010-05-22 22:45:18','P',1,'better:\nSelect which branch or tag to use as source and which one as destination.',NULL,577,5,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///H4='),(572,49,'2010-05-25 21:21:08','P',1,'I should more investigate on this because right now this don\'t tell me anything.','AAALun///E8=',577,6,'org.eclipse.egit.ui/plugin.xml','AAALun///Cc='),(572,6,'2010-05-25 15:35:37','P',1,'This seems to be the wrong class, it should be GitBranchSubscriberParticipant.\n\nSee also comment on patch set 1',NULL,577,6,'org.eclipse.egit.ui/plugin.xml','AAALun///E8='),(40,49,'2010-05-25 21:21:08','P',1,'Done','AAALun///E4=',577,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitSynchronize.java','AAALun///Cs='),(40,6,'2010-05-25 15:35:37','P',1,'typo: getParticipant',NULL,577,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitSynchronize.java','AAALun///E4='),(715,49,'2010-05-25 21:21:08','P',1,'Done','AAALun///GA=',577,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///Cg='),(713,49,'2010-05-25 21:21:08','P',1,'Done','AAALun///F4=',577,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///Ck='),(712,49,'2010-05-25 21:21:08','P',1,'Done','AAALun///F8=',577,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///Co='),(713,4,'2010-05-24 21:20:47','P',1,'I would just use (similar to Fetch dialog)\n\nRef:',NULL,577,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///F4='),(712,4,'2010-05-24 21:20:47','P',1,'more consistent with e.g. Fetch dialog would be\n\nRemote Repository:',NULL,577,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///F8='),(715,4,'2010-05-24 21:20:47','P',1,'better (some typos, unclear what\'s source what\'s destination):\n\nSelect which branch or tag to synchronize against the current local HEAD.',NULL,577,6,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALun///GA='),(2,49,'2010-06-01 06:43:54','P',1,'Yes, it is a copy-paste issue ...','AAALun//+6Q=',577,8,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/wizards/synchronize/SynchronizeViewTest.java','AAALun//+6I='),(2,4,'2010-06-01 00:02:24','P',1,'Was Remy participating in the implementation of this class ? Or is this due to cut&paste',NULL,577,8,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/wizards/synchronize/SynchronizeViewTest.java','AAALun//+6Q='),(26,49,'2010-06-05 11:47:35','P',1,'Done','AAALu3///xQ=',577,9,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/common/EGitTesCase.java','AAALu3///v0='),(26,4,'2010-06-04 22:57:03','P',1,'Typo in class name\ns/EGitTesCase/EGitTestCase/',NULL,577,9,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/common/EGitTesCase.java','AAALu3///xQ='),(67,49,'2010-06-14 18:36:13','P',1,'Done','AAALu3///vM=',577,9,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/views/synchronize/SynchronizeViewTest.java','AAALu3///qY='),(2,49,'2010-06-05 11:47:35','P',1,'This part comes from time when before I\'ve extracted EGitTestCase class and it was to indicate authors of restetWorkbench() and closeWelcomePage() methods. Now it can be removed.\n\nDone.','AAALu3///xM=',577,9,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/views/synchronize/SynchronizeViewTest.java','AAALu3///vk='),(67,4,'2010-06-05 13:56:53','P',1,'typo in method name\n\ns/Chnages/Changes/',NULL,577,9,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/views/synchronize/SynchronizeViewTest.java','AAALu3///vM='),(185,49,'2010-06-05 11:47:35','P',1,'Thank you for pointing this out. You didn\'t corrupt anything, this is what I want to say. Done','AAALu3///xA=',577,9,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/views/synchronize/SynchronizeViewTest.java','AAALu3///vo='),(94,49,'2010-06-05 11:47:35','P',1,'same as above, done.','AAALu3///xE=',577,9,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/views/synchronize/SynchronizeViewTest.java','AAALu3///vs='),(59,49,'2010-06-05 11:47:35','P',1,'This should be 600s (10mins), one zero to much, done.','AAALu3///xI=',577,9,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/views/synchronize/SynchronizeViewTest.java','AAALu3///vw='),(185,4,'2010-06-04 22:57:03','P',1,'English in comment should be improved (hope I didn\'t corrupt what you want to say):\n\nEGit decorates the project node shown in the package explorer. \nThe \'>\' decorator indicates that there are uncommitted changes present in the project. \nAlso the repository and branch name are added as a suffix (\'[<repo name> <branch name>]\' suffix). \nTo bypass this decoration we use here this loop.',NULL,577,9,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/views/synchronize/SynchronizeViewTest.java','AAALu3///xA='),(94,4,'2010-06-04 22:57:03','P',1,'again crazy wait time',NULL,577,9,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/views/synchronize/SynchronizeViewTest.java','AAALu3///xE='),(59,4,'2010-06-04 22:57:03','P',1,'Do you really want to wait 6000s here ? This is almost 2 hours, that\'s insane for an automated test.',NULL,577,9,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/views/synchronize/SynchronizeViewTest.java','AAALu3///xI='),(2,4,'2010-06-04 22:57:03','P',1,'Was this class started in 2009 ? Or is this copy&paste problem ?',NULL,577,9,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/views/synchronize/SynchronizeViewTest.java','AAALu3///xM='),(135,49,'2010-06-05 11:47:35','P',1,'Ups, I don\'t have idea how can I miss this conflict :/\n\nResolved, done.','AAALu3///w8=',577,9,'org.eclipse.egit.ui/plugin.properties','AAALu3///vg='),(135,4,'2010-06-04 22:57:03','P',1,'this is an unresolved merge conflict !',NULL,577,9,'org.eclipse.egit.ui/plugin.properties','AAALu3///w8='),(520,49,'2010-06-14 18:36:13','P',1,'Done','AAALu3///uw=',577,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALu3///qU='),(520,4,'2010-06-05 13:56:53','P',1,'typo in method name',NULL,577,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALu3///uw='),(1595,49,'2010-06-05 11:47:35','P',1,'Done','AAALu3///w4=',577,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALu3///vc='),(1595,4,'2010-06-04 22:57:03','P',1,'why this change ? we try to avoid pure formatting changes in places not touched by the change',NULL,577,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALu3///w4='),(58,4,'2010-06-05 13:56:53','P',1,'this javadoc looks incomplete',NULL,577,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/dto/GitSynchronizeData.java','AAALu3///u4='),(47,4,'2010-06-05 13:56:53','P',1,'this javadoc looks incomplete',NULL,577,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/dto/GitSynchronizeData.java','AAALu3///u8='),(28,4,'2010-06-05 13:56:53','P',1,'missing javadoc for public class',NULL,577,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/dto/GitSynchronizeData.java','AAALu3///vA='),(21,4,'2010-06-05 13:56:53','P',1,'missing javadoc',NULL,577,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/dto/GitSynchronizeDataSet.java','AAALu3///u0='),(42,49,'2010-06-05 14:14:34','P',1,'Done','AAALu3///vE=',577,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitSynchronize.java','AAALu3///uo='),(42,4,'2010-06-05 13:56:53','P',1,'style nit: unnecessary blank line',NULL,577,9,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitSynchronize.java','AAALu3///vE='),(147,4,'2010-04-25 21:57:46','P',1,'style nit: missing blank after comma',NULL,581,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/SWTPlotRenderer.java','AAAAA3///YM='),(145,4,'2010-04-25 21:57:46','P',1,'style nit: extra blank before textsz.x',NULL,581,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/SWTPlotRenderer.java','AAAAA3///YQ='),(156,4,'2010-04-25 21:57:46','P',1,'style nit: missing blank after + operator and extra blank before textsz.x',NULL,581,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/SWTPlotRenderer.java','AAAAA3///YU='),(153,4,'2010-04-25 21:57:46','P',1,'style nit:\nthe following order of arguments\n(cellX + x, cellY + ...\nwould be more consistent with other similar statements',NULL,581,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/SWTPlotRenderer.java','AAAAA3///YY='),(392,51,'2010-04-26 15:33:17','P',1,'I have introduced this getter to avoid new constructors with FS parameter in GitIndex and RefDirectory. But it\'s a bit ugly anyway as RefDirectory member has to be created after assigning FS member. So when you agree to simply add FS parameter to existing constructor of GitIndex and RefDirectory, I\'ll happily remove this getter.\n\nIf an application is able to choose correct FS for Repository construction, it is probably also able to choose correct FS for FileTreeIterator. If managing the FS outside of the Repository should get really to annoying in the application, we can still discuss whether to re-introduce that getter.','AAAAA3///gY=',588,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAAAA3///f4='),(100,1,'2010-04-22 15:16:06','P',1,'Style-nit: Trailing whitespace error.',NULL,588,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAAAA3///gc='),(256,1,'2010-04-22 15:16:06','P',1,'You should also pass through the fs instance to the ObjectDirectory.',NULL,588,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAAAA3///gQ='),(253,1,'2010-04-22 15:16:06','P',1,'You should also pass through the fs instance to the ObjectDirectory.',NULL,588,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAAAA3///gU='),(392,1,'2010-04-22 15:16:06','P',1,'Should be getFS().\n\nBut I\'m also not that happy about including this in the public API of Repository.  I actually want to start removing some of the filesystem based assumptions from this class.  We probably have no choice in the matter though, I can see how an application would want this available so it can later construct a FileTreeIterator, which needs the same FS instance.',NULL,588,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAAAA3///gY='),(392,1,'2010-04-26 15:46:56','P',1,'Yea, go ahead and make FS a parameter to the constructor of GitIndex and RefDirectory.','AAAAA3///f4=',588,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAAAA3///UI='),(392,51,'2010-04-29 17:32:09','P',1,'I\'ve just tried now to add FS to OpenSshConfig. But this will require FS to be passed through many other transport-related classes. Similar for GitIndex which is used in various tests, too. So I think the least intrusive solution will be to keep getFS() public :(','AAAAA3///UI=',588,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALuX///7s='),(88,51,'2010-04-26 15:33:17','P',1,'I can\'t see a relation to a Repository here (resp. OpenSshConfig may be used for many Repository\'s)?\n\nIf your comment should just suggest to make FS a parameter of this method, that will be fine.','AAAAA3///gA=',588,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/OpenSshConfig.java','AAAAA3///f0='),(88,1,'2010-04-22 15:16:06','P',1,'Shouldn\'t this be using the repository\'s FS type?  Because the user\'s .ssh/config should come from the Git system they are using for this repository, not the one we auto-detected.',NULL,588,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/OpenSshConfig.java','AAAAA3///gA='),(88,1,'2010-04-26 15:46:56','P',1,'Lets say we detect Cygwin as the FS type, because cygpath appeared in the user\'s $PATH.\n\nBut the user has configured SmartGit to *not* use Cygwin.\n\nNow when JGit tries to use an SSH connection, its going to be asking the user\'s *Cygwin* home directory for the .ssh/config and their SSH keys.  But that makes no sense, if SmartGit was configured to *not* use Cygwin, why is it using the Cygwin based settings?\n\nSo, this needs to be using the same FS instance that the Repository its being called by is using.','AAAAA3///f0=',588,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/OpenSshConfig.java','AAAAA3///UE='),(216,1,'2010-04-22 15:16:06','P',1,'Shouldn\'t this be using the repository\'s FS type?  Because the user\'s .ssh/id_rsa should come from the Git system they are using for this repository, not the one we auto-detected.',NULL,588,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/SshConfigSessionFactory.java','AAAAA3///gE='),(197,1,'2010-04-22 15:16:06','P',1,'Shouldn\'t this be using the repository\'s FS type?  Because the user\'s .ssh/known_hosts should come from the Git system they are using for this repository, not the one we auto-detected.',NULL,588,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/SshConfigSessionFactory.java','AAAAA3///gI='),(131,1,'2010-04-22 15:16:06','P',1,'Shouldn\'t this use the Repository\'s FS instance?  Just in case we detected Cygwin, but the application wants msysgit behavior?  The user\'s home directory where the Amazon S3 property files are stored should match the same home directory that the SSH configuration is stored in, which is determined by the FS type.',NULL,588,1,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportAmazonS3.java','AAAAA3///gM='),(141,1,'2010-04-22 15:16:06','P',1,'This should be thread-safe, and its not.  The prior implementation was relying on class initialization to ensure thread-safe initialization of the userHome property.  Since you\'ve moved this to be an instance member of this class, you need to modify this method to use some sort of thread-safe construct here.\n\nIt might just be sufficient to mark userHome volatile.  java.io.File is immutable, and initializing the variable is relatively inexpensive, so doing it concurrently from multiple threads in the event that more than one thread needs the value at the same time and its not yet prepared isn\'t an issue.',NULL,588,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java','AAAAA3///gg='),(141,1,'2010-04-24 19:02:37','P',1,'Actually, there is another option available to us here.\n\nThe default implementation of userHomeImpl() is pretty cheap.  So we can simply remove the method and inline it all into userHome(), and avoid the userHome instance member altogether.  Threading problems go away.\n\nIn FS_Win32_Cygwin, we introduce a private static inner class with a static final field containing the user home:\n\n  @Override\n  public File userHome() {\n    return UserHome.home;\n  }\n\n  private static class UserHome {\n    static final File home = userHomeImpl();\n  }\n\nand let class initialization take care of the caching and memory synchronization for us.  Then we aren\'t paying the volatile read penalty on each access.\n\nThough, I have to point out, a volatile read is far cheaper than constructing the PrivilegedAction needed to pass through the AccessController.doPrivileged to get the user.home system property.','AAAAA3///Yw=',588,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java','AAAAA3///Ys='),(141,1,'2010-04-24 18:37:27','P',1,'No, its not safe.\n\nUnder the Java memory model, a thread can read the userHome member and see the java.io.File object\'s reference, but be unable to see the fields assigned within the object.  It could be seeing garbage from the prior resident of that location, or it could be seeing all NULs from the allocator clearing the region before initialization.\n\nThe only way to ensure that all writes up to a particular point are visible, and thus that the object(s) in question are internally consistent from the perspective of a reader, is to travel through a synchronization barrier.  Those barriers exist at a synchronized block, or when writing/reading a volatile.\n\nThe memory model requires that all writes carried out within a thread prior to a write to a volatile must be visible to another thread that reads that volatile first.  Or, that all writes carried out before releasing a monitor on an object must be visible to another thread after it acquires that same monitor.\n\nAnything else is playing with fire.\n\nSo.  Either delete the userHome property and compute it on the fly every time its requested, or use a volatile.\n\nGiven that on Cygwin userHome is computed via a fork+exec, that\'s pretty expensive.  We could permit the default implementation to compute on demand every time, but we still should cache the result in the Cygwin case.  Which brings us right back to this discussion of needing to mark the field volatile.  :-)','AAAAA3///ZI=',588,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java','AAAAA3///Yw='),(141,8,'2010-04-24 12:16:01','P',1,'Shawn: Isn\'t this safe?. What would happen, should two threads enter this method at the same time is that two File objects gets constructed, which is a performance problem, but not a safety problem. This method could construct a new File instance every time.','AAAAA3///gg=',588,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java','AAAAA3///ZI='),(141,51,'2010-04-29 18:14:55','P',1,'getUserHome() is accessed in SystemReader which is accessed in Repository constructor, so it has to be evaluated virtually always. Hence, I will make it final and move evaluation to the constructor.','AAAAA3///Ys=',588,1,'org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java','AAALuX///7o='),(29,5,'2010-04-27 15:09:36','P',1,'Done ... and also added the missing \",\" in the previous line','AAAAA3///cc=',591,1,'org.eclipse.jgit.test/META-INF/MANIFEST.MF','AAAAA3///b8='),(29,4,'2010-04-23 08:10:44','P',1,'style: could be sorted alphabetically by referenced package',NULL,591,1,'org.eclipse.jgit.test/META-INF/MANIFEST.MF','AAAAA3///cc='),(1,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///fw=',591,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAAAA3///b4='),(35,5,'2010-04-27 15:09:36','P',1,'changed the code so that I can use .equals()','AAAAA3///dc=',591,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAAAA3///bo='),(47,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///dk=',591,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAAAA3///bU='),(29,5,'2010-04-27 15:09:36','P',1,'If this code would be just for us I would agree. But I wanted the section where I do the commits to be as less complicated as possible - minimize even references to local variables which a reader would have to lookup before he understands. I know that for doing the assertions I have non-optimal code with redundancies - but that was intentionally.','AAAAA3///dg=',591,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAAAA3///bw='),(38,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///dE=',591,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAAAA3///bY='),(46,4,'2010-04-23 08:10:44','P',1,'typo: s/got/get/',NULL,591,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAAAA3///cY='),(35,1,'2010-04-22 18:38:56','P',1,'Why not .equals() here?  The message code should be fully 8-bit clean with no edits being applied along this code path, right?  So the strings should be identical.',NULL,591,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAAAA3///dc='),(38,8,'2010-04-22 19:00:18','P',1,'What\'s wrong with assertEquals?',NULL,591,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAAAA3///dE='),(29,1,'2010-04-22 18:38:56','P',1,'Maybe set this up before you make the commits above, and use setMessage(expectedMessages[0]) to point to the first message?',NULL,591,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAAAA3///dg='),(47,1,'2010-04-22 18:38:56','P',1,'Should we verify the message text is what we expect?',NULL,591,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAAAA3///dk='),(38,1,'2010-04-22 18:38:56','P',1,'Style-nit: spaces around == operator.',NULL,591,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAAAA3///dY='),(1,1,'2010-04-22 18:38:56','P',1,'Missing standard license header.',NULL,591,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAAAA3///fw='),(24,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///fs=',591,1,'org.eclipse.jgit/META-INF/MANIFEST.MF','AAAAA3///bQ='),(24,1,'2010-04-22 18:38:56','P',1,'Can we sort this alphabetically with the other packages?',NULL,591,1,'org.eclipse.jgit/META-INF/MANIFEST.MF','AAAAA3///fs='),(127,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///eQ=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///a0='),(111,5,'2010-04-27 15:09:36','P',1,'ok, we should be able to commit on a detached head.\n\nBut I have to watch out that if the head is detached I should not try to to the RefUpdate stuff later, or?','AAAAA3///eU=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///a4='),(108,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///cU=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///a8='),(156,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///cM=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///ac='),(206,5,'2010-04-27 15:09:36','P',1,'you mean \n\npublic CommitCommand setAuthor(String name, String email, long when, TimeZone tz)\n\ncorrect? when should be a long when you have additionally the timezone.\n\nI\'ll for know only add methods for author and commiter which expect name and email. The current time I\'ll recompute always in the call() method','AAAAA3///fA=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///aE='),(154,5,'2010-04-27 15:09:36','P',1,'No, I don\'t want this behavior. I\'ll add a patch which will use PersonIdents which have a uptodate timestamp for every call.','AAAAA3///ec=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///ag='),(212,5,'2010-04-27 15:09:36','P',1,'Not anymore. I changed this javadoc so that it doesn\'t fit anymore.','AAAAA3///ew=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///aI='),(153,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///eg=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///ak='),(197,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///fE=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///aM='),(148,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///eY=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///ao='),(194,5,'2010-04-27 15:09:36','P',1,'Not anymore. I changed this javadoc so that it doesn\'t fit anymore.','AAAAA3///e0=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///aQ='),(140,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///eI=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///as='),(185,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///e4=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///aU='),(134,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///eM=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///aw='),(168,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///fI=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///aY='),(100,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///eo=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///bA='),(98,5,'2010-04-27 15:09:36','P',1,'yes, you are right. Especially since the LogCommand also returns RevCommits we should return it here also.\nWill do it\n\nalso the Callable interface will be done. I\'ll introduce an abstract superclass for all Commands fullfilling the Callable interface.','AAAAA3///ek=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///bE='),(76,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///fQ=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///bI='),(67,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///fU=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///bM='),(156,4,'2010-04-23 08:10:44','P',1,'style: avoid curly brace around single statement',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///cM='),(149,4,'2010-04-23 08:10:44','P',1,'some verb is missing between \"we\" and \"all\"\n\nmaybe better : \"Then validates that all required data has been provided.\"',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///cQ='),(108,4,'2010-04-23 08:10:44','P',1,'s/he/it/',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///cU='),(194,1,'2010-04-22 18:38:56','P',1,'Style-nit:  You can probably fit the entire /** */ on one line.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///e0='),(185,1,'2010-04-22 18:38:56','P',1,'Please document how the committer is determined if set to null by this method.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///e4='),(203,1,'2010-04-22 18:38:56','P',1,'Please document that author is defaulted to committer if set to null by this method.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///e8='),(154,1,'2010-04-22 18:38:56','P',1,'So after the first invocation of run() we freeze the commit timestamp and never update it again?  We should document that behavior in the class docs, or at least in the run method.  Its not clear that you are doing that.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///ec='),(153,1,'2010-04-22 18:38:56','P',1,'Style-nit: We avoid curly braces on single statements.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///eg='),(140,1,'2010-04-22 18:38:56','P',1,'Do not force update.  This is almost always wrong, because it poses a race condition.\n\nThe correct code here is:\n\n  ru.setExpectedOldObjectId(parentId);\n  switch (ru.update()) {\n  case NEW:\n  case FAST_FORWARD:\n    return commit;\n\n  default:\n    throw some exception, it failed\n  }',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///eI='),(98,1,'2010-04-22 18:38:56','P',1,'Maybe we should always have commands implement a call() method and the java.util.concurrent.Callable interface.  It may help application developers to chain together commands with other platform APIs, especially things like a Future.\n\nAlso, do we really want to expose the Commit object to the caller?  I\'m trying to get rid of it.  Maybe RevCommit is better since its immutable, and offers more functionality (e.g. parsing of footer lines).',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///ek='),(134,1,'2010-04-22 18:38:56','P',1,'If we use the RevCommit like I suggested above as the return type here we can generate the subject line from the RevCommit\'s getShortMessage method, rather than parsing this ourselves.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///eM='),(100,1,'2010-04-22 18:38:56','P',1,'Style-nit:  We use Id not ID.  Also, this appears to be scoped only to the try block below.  In general we try to declare variables with the smallest scope required for their visibility.  Since its never used outside of the try, it should be declared within the try.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///eo='),(127,1,'2010-04-22 18:38:56','P',1,'Style-nit: Spaces around operator !=',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///eQ='),(111,1,'2010-04-22 18:38:56','P',1,'Why can\'t we commit on a detached HEAD?  Its supposed in C Git just fine.\n\nI think you really just need to check that head != null here.  If its null, we\'re unable to continue and should throw.  But if its non-null we\'re OK and keep going.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///eU='),(212,1,'2010-04-22 18:38:56','P',1,'Style-nit:  You can probably fit the entire /** */ on one line.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///ew='),(148,1,'2010-04-22 18:38:56','P',1,'Probably should just use /** style javadoc comment here instead.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///eY='),(206,1,'2010-04-22 18:38:56','P',1,'I think we should be nice and offer a couple of overloads here:\n\n  public CommitCommand setAuthor(String name, String email)\n  public CommitCommand setAuthor(String name, String email, Date when)\n  public CommitCommand setAuthor(String name, String email, Date when, TimeZone tz)\n\nOr\n\n  public CommitCommand setAuthorName(String name)\n  public CommitCommand setAuthorEmail(String email)\n  public CommitCommand setAuthorDate(Date when)\n\nso applications can more easily just assign the author.  Having to make a PersonIdent can be sort of annoying.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///fA='),(197,1,'2010-04-22 18:38:56','P',1,'Style-nit: Unnecessary blank line.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///fE='),(168,1,'2010-04-22 18:38:56','P',1,'Style-nit: We (lately) prefer {@code commit} over <code>commit</code> because it is less verbose, but produces the same style of output when formatted.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///fI='),(169,1,'2010-04-22 18:38:56','P',1,'Its not this class, its specifically {@code this}.  I would just say:\n\n * @return {@code this}',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///fM='),(76,1,'2010-04-22 18:38:56','P',1,'Should be final.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///fQ='),(67,1,'2010-04-22 18:38:56','P',1,'Style-nit: Unnecessary blank line.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///fU='),(48,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///fk=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///aA='),(125,4,'2010-04-23 08:10:44','P',1,'style: extra parentheses',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///cg='),(118,8,'2010-04-22 19:00:18','P',1,'style: extra parentheses',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///dI='),(71,1,'2010-04-22 18:38:56','P',1,'I think an important test of this API would be to add or port existing pgm classes over to use it.  We don\'t yet have a commit subcommand.  Maybe you can try adding it as part of this series to show how to use the CommitCommand, and to prove that the API can be used to simply perform the exact function its supposed to do.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///dU='),(79,1,'2010-04-22 18:38:56','P',1,'Style-nit: You can use /** */ all on one line here.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///fc='),(81,1,'2010-04-22 18:38:56','P',1,'Should be final.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///fg='),(48,1,'2010-04-22 18:38:56','P',1,'You should insert a paragraph break at the end of the first sentence here.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///fk='),(105,1,'2010-04-22 18:38:56','P',1,'Style-nit: We don\'t put parens around return.  Thus:\n\n  return new CommitCommand(this);',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///fY='),(81,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///fg=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///Z0='),(79,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///fc=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///Z4='),(71,5,'2010-04-27 15:09:36','P',1,'I agree. But I would like to do it in another Change. I\'ll propose a new one which offers commit() in the pgm package. (nearly 50 comments is enough for one change, :-) )','AAAAA3///dU=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///Z8='),(125,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///cg=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///Zo='),(118,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///dI=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///Zs='),(105,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///fY=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///Zw='),(112,4,'2010-04-23 08:10:44','P',1,'style: add blanks around operator',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///cI='),(83,1,'2010-04-22 18:38:56','P',1,'Style-nit: Might as well just use /** */ style Javadoc comment.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///d0='),(145,1,'2010-04-22 18:38:56','P',1,'This will never work, there\'s more going on than a single starting point.  It has to be at least a Set<ObjectId>, if not more verbose than that.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///d4='),(124,1,'2010-04-22 18:38:56','P',1,'Hah.  As complicated as RevWalk is... its about as simple as you can get.  You are about to reinvent its API I think.\n\nHow about:\n\n  public LogCommand add(ObjectId start) {\n    return add(true, start);\n  }\n\n  /** Same as {@code --not start}, or {@code ^start}, or {@code add(false, start)}. */\n  public LogCommand not(ObjectId start) {\n    return add(false, start);\n  }\n\n  /* Adds the range {@code p..q}. */\n  public LogCommand add(ObjectId p, ObjectId q) {\n    return not(p).add(q);\n  }\n\n  public LogCommand add(boolean include, ObjectId start);\n\nSo we can translate an expression like:\n\n  git log A ^B C\n\ninto Java as:\n\n  log().add(A).add(false, B).add(C)',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///d8='),(136,8,'2010-04-22 19:00:18','P',1,'There are also some exceptions thrown. Null is returned only when\nthe syntax is valid but not object is found.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///dM='),(111,1,'2010-04-22 18:38:56','P',1,'Style-nit:  We avoid double method calls like this.  Instead:\n\n  RevCommit c;\n  while ((c = walk.next()) != null)\n    ret.add(c);\n\nor even:\n\n  for (;;) {\n    RevCommit c = walk.next();\n    if (c != null)\n      ret.add(c);\n    else\n      break;\n  }',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///do='),(104,1,'2010-04-22 18:38:56','P',1,'Do we *really* want to lock ourselves into the List concept as a result type here?  I suspect most users of this really just need an Iterable<RevCommit> so they can easily access it from a for loop iteration.  RevWalk already implements that.\n\nIf we do implement List here... we probably should try to be smart about it and make the list lazy to construct itself.  See RevCommitList for what I mean about that.  It probably doesn\'t fully implement the List API, and so has corner cases we would need to finish out.  But the general idea would be, don\'t materialize the entire result unless the caller forces us to with size(), or a get(int) call for the last element in the List.  Otherwise, materialize out only as far as they have asked for.\n\nSure, certain sorting types require us to materialize the whole thing first anyway.  But not all do.  And not all applications need us to materialize the entire thing in order to process the results.  Its why RevWalk uses Iterable as its main public interface.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///dw='),(72,1,'2010-04-22 18:38:56','P',1,'Should be final.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///eA='),(70,1,'2010-04-22 18:38:56','P',1,'Style-nit: Unnecessary blank line.',NULL,591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///eE='),(145,5,'2010-04-27 15:09:36','P',1,'yes, I agree. I\'ll remove the getter(). With our addRange() and not() the return value would be too complicated.','AAAAA3///d4=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///XU='),(136,5,'2010-04-27 15:09:36','P',1,'setStart() is renamed to add(). And for now I decided not to support string based rev-specifications. This proposal get\'s too big otherwise.','AAAAA3///dM=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///XY='),(124,5,'2010-04-27 15:09:36','P',1,'This LogCommand was not in my focus (I wanted to do the commit but found out it\'s hard to test without a log). Therefore I didn\'t inspected the APIs very well and concentrated only to support a \"Log\" without any parameters.\nBut after I looked at the RevWalk again I see that we can easily offer more of the functionality of RevWalk through this API. I\'ll add at least add() and not() and add(x,y) to support \"Log A..B\".\nI am wondering whether we need a seperate class for RevisionSpecifications and RangeSpecifications. Otherwise we have to add special methods for specifying ranges in a lot of commands. I\'ll keep this in mind and implement it when I need it.','AAAAA3///d8=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Yc='),(83,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///d0=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Zc='),(72,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///eA=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Zg='),(70,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///eE=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Zk='),(112,5,'2010-04-27 15:09:36','P',1,'Done','AAAAA3///cI=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///ZM='),(104,5,'2010-04-27 15:09:36','P',1,'This return type has been changed back and forth when I started to write the test class. It was first an Iterable and test have been failing because I only received one single commit. Changed the code to use List. Found the bug (a missing addParent to the Commit() object .... and forgot to change the return type back to Iterable.','AAAAA3///dw=',591,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///ZY='),(77,5,'2010-04-27 20:41:19','P',1,'I tried back and forth and finally came to the conclusion that we need something more for our exception handling. I invented Exceptions for prominent error situations which can happen with the new API and which are not covered by the existing exceptions. I also added, after some other trials, a JGitInternalException class. Whenever during command execution I receive exceptions on which a caller of our API can\'t react properly (e.g. low-level IOExceptions) I wrap them into a JGitInternalException. This should make our method signatures smaller and a user doesn\'t have to catch <n> exceptions which he all doesn\'t understand and which all lead to the same handling (throwing and error message)\nSee the javadoc of JGitInternalException','AAAAA3///Vk=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///N0='),(231,5,'2010-04-27 20:41:19','P',1,'Done','AAAAA3///VY=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///Nc='),(143,5,'2010-04-27 20:41:19','P',1,'Done','AAAAA3///VE=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///Ng='),(140,5,'2010-04-27 20:41:19','P',1,'Done','AAAAA3///VI=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///Nk='),(149,5,'2010-04-27 20:41:19','P',1,'removed this line','AAAAA3///VA=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///No='),(276,5,'2010-04-27 20:41:19','P',1,'Done','AAAAA3///VM=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///NQ='),(106,5,'2010-04-27 20:41:19','P',1,'Done','AAAAA3///Vc=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///Ns='),(270,5,'2010-04-27 20:41:19','P',1,'Done','AAAAA3///VU=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///NU='),(104,5,'2010-04-27 20:41:19','P',1,'Done','AAAAA3///Vg=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///Nw='),(237,5,'2010-04-27 20:41:19','P',1,'Done','AAAAA3///VQ=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///NY='),(149,1,'2010-04-26 15:15:55','P',1,'This call is pointless.  We\'re about to discard the Commit object, and all you really needed was that commitId anyway.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///VA='),(106,1,'2010-04-26 15:15:55','P',1,'s/run/call/',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///Vc='),(143,1,'2010-04-26 15:15:55','P',1,'See my remarks below, we shouldn\'t reset the time.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///VE='),(104,1,'2010-04-26 15:15:55','P',1,'s/run/call/',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///Vg='),(140,1,'2010-04-26 15:15:55','P',1,'See my remarks below, we shouldn\'t reset the time.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///VI='),(77,1,'2010-04-26 15:15:55','P',1,'Given the work being done by Sasa Zivkov to translate messages coming out of the JGit library, we shouldn\'t be doing this.\n\nIf the caller needs to know this type of exception from other exceptions, this needs to be a custom exception type that they can catch with a try-catch block.  If the caller shouldn\'t need to handle this exception differently from other exceptions we throw, this message should simply be private to the package, with possibly a translation for presentation.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///Vk='),(276,1,'2010-04-26 15:15:55','P',1,'Same issue as committer timestamp, we should be using exactly what is recorded in the PersonIdent.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///VM='),(237,1,'2010-04-26 15:15:55','P',1,'No.  If the caller gave us a PersonIdent, we should use that timestamp *exactly*.  The only time we should compute the timestamp on the fly is when we are creating the PersonIdent on behalf of the caller, e.g. because they used the setCommitter(name, email) overload, or because they allowed committer to be null and we\'re computing it during call() from the repository data.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///VQ='),(270,1,'2010-04-26 15:15:55','P',1,'Style-nit: Same as with setCommitter(name, email) overload.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///VU='),(231,1,'2010-04-26 15:15:55','P',1,'Style-nit: I think I would prefer this to be defined as:\n\n  public CommitCommand setCommitter(String name, String email) {\n    return setCommitter(new PersonIdent(name, email));\n  }',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///VY='),(63,5,'2010-04-27 20:41:19','P',1,'Done','AAAAA3///Vo=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///NI='),(58,5,'2010-04-27 20:41:19','P',1,'Done','AAAAA3///Vs=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///NM='),(63,1,'2010-04-26 15:15:55','P',1,'s/run/call/',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///Vo='),(58,1,'2010-04-26 15:15:55','P',1,'s/run/call/',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAAAA3///Vs='),(73,5,'2010-04-27 20:41:19','P',1,'this field was removed','AAAAA3///U0=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///M0='),(177,5,'2010-04-27 20:41:19','P',1,'Done','AAAAA3///U4=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Mc='),(148,5,'2010-04-27 20:41:19','P',1,'As I said, my next proposal disallows multiple invocations with one command instance. In this case ObjectID is ok, you don\'t have the need to specify mutable options which can be altered during invocations.','AAAAA3///Uk=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Mg='),(124,5,'2010-04-27 20:41:19','P',1,'Your comments here and also the comments on PersonIdent\'s in CommitCommand make me think that it is maybe not so good to really allow multiple invocations of call() on a command. Some options (e.g. PersonIdents) don\'t make sense to be reused multiple times. Also coding wise it makes it complicated. If you set a field to it\'s default value during the first invocation, how to determine whether the field was ever set explicitly during the second invocation to call(). \n\nAnother problem are return values. If we dissallow multiple invocations on one instance we can more easily. Imagine RevWalks: I can easily write a command which has one RevWalk as field and which call() method returns this field. But this is not possible anymore if we have multiple invocations and for the first invocation you are still walking through the results and for the second invocation you start adding options (which will try to modify the RevWalk already passed to the caller).\n\nIf we want to be able to reuse a preconfigured command object for multiple command invocations we (which I guess happens seldomly) we could even just provide a clone() method which allows to create a copy of your template command before you call call(). \n\nMy next proposal will tell at least in the javadoc not to call call() twice.\n\nThe specific problem on which you comment here is solved. Have only one revwalk instance which I\'ll populate during the add(), not() ,... methods and which I will directly return in this method.','AAAAA3///Uo=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Mk='),(104,5,'2010-04-27 20:41:19','P',1,'Done','AAAAA3///U8=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Mo='),(96,5,'2010-04-27 20:41:19','P',1,'objectId was removed','AAAAA3///Us=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Ms='),(95,5,'2010-04-27 20:41:19','P',1,'objectId was removed','AAAAA3///Uw=',591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Mw='),(73,1,'2010-04-26 15:15:55','P',1,'Unused, since add(boolean, ObjectId) below enqueues directly into the RevWalk.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///U0='),(177,1,'2010-04-26 15:15:55','P',1,'Should be {@code since..until}',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///U4='),(104,1,'2010-04-26 15:15:55','P',1,'Well, its technically an iteration of RevCommits, not a list.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///U8='),(148,1,'2010-04-26 15:15:55','P',1,'Actually, any use of ObjectId as a parameter probably should be AnyObjectId instead.  This permits the mutable variant to be passed in.  Normally that might be a problem, since the caller can change its value after we return.  But it shouldn\'t be an issue here, because we\'re doing a lookup of the object in the RevWalk and holding onto the located result.  So we\'re copying the value we were given, which makes it OK to take the MutableObjectId variant.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Uk='),(124,1,'2010-04-26 15:15:55','P',1,'Should we be reusing the walk we\'ve already setup?  Why create a new pool of revision objects when we can just reuse the one we already have?\n\nOn the other hand, a walker could dispose of object bodies, and a reset and reuse might confuse the caller because the bodies are gone.  That\'s actually a bug in RevWalk that we should probably address and fix there rather than forcing an entire new pool to be created for a second invocation.\n\nLikewise, RevWalk discards the starting commits when it resets.  We probably should allow those to be retained somehow, so the same walk can be executed again without needing to maintain our own copy of the starting points (RevWalk calls them \"roots\" inside of itself.)\n\nFinally, RevWalk\'s implementation of Iterable is probably wrong.  It only works once.  Creating a 2nd Iterator fails.  So we probably should fix RevWalk first so its iterator() method resets the walk and starts it over again.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Uo='),(96,1,'2010-04-26 15:15:55','P',1,'This default is a great idea.  Unfortunately it doesn\'t work because start is never assigned, so its always triggering.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Us='),(95,1,'2010-04-26 15:15:55','P',1,'Always true since start is never assigned.',NULL,591,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///Uw='),(154,1,'2010-04-27 23:34:26','P',1,'Hmm.  This is more like a ConcurrentModificationException than it is a state exception.  Do we want our own subclass of the GitAPIException which denotes this particular type of concurrent modification against a branch?\n\nSorry I missed this earlier.',NULL,591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///L8='),(127,1,'2010-04-27 23:34:26','P',1,'Style-nit: Bad line wrapping here, can we put more words on this line beyond just \"for\" ?',NULL,591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///MA='),(118,1,'2010-04-27 23:34:26','P',1,'\"currently\"?  We\'ll probably never support this.  I think it only makes sense to commit to HEAD through this API.  If you want to make a commit without touching HEAD, you probably should just use the lower-level library.',NULL,591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///ME='),(89,1,'2010-04-27 23:34:26','P',1,'If its used for only one invocation, we should have a defined behavior when its invoked a second time on the same instance.\n\nBy defined I mean, we either:\n\n* Return the exact same RevCommit instance as we returned on the prior invocations.\n* Throw a AlreadyCalledException which extends GitAPIException, and all other commands also throw this if invoked a second time.\n\nApplications are going to try to run call() more than once.  Its a bug, but I can see applications making that mistake every once in a while.  We should help them figure out they have a problem earlier rather than later by failing-fast, or having predictable behavior (always produces the same prior result).\n\nI think we\'re safer throwing an exception.',NULL,591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAAAA3///MI='),(118,5,'2010-04-28 15:04:02','P',1,'right - I\'ll remove the \"currently\"','AAAAA3///ME=',591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX////0='),(89,5,'2010-04-28 15:04:02','P',1,'Throwing a GitAPIException from call() is easy. But what about our Setter- and Getter- Methods? Fail-fast strategy would ideally throw exceptions on every call to a setter() after the first invocation of call(). But of course I don\'t like to have every setter to throw an checked exception which everybody has to catch.\n\nEither an checked exception during call() or an unchecked excpetion (e.g. IllegalStateException) during call(() and every setter. UncheckException can\'t be subclasses of JGitInternalException\n\nI think I would prefer a IllegalStateException thrown everywhere.\n\nHow to implement that? Really pollute every setter? I had a talk with Sasa about this and he suggested dynamic proxies. The Git factory would produce dynmic proxies instead of directly handing out the Command instance. This would require to introduce an interface for every command.\nAn alternative would be byte-code modifications or really a superclass for all commands having a checkState method which has to be called by convention by every call() and setter.\n\nI\'ll propose the last atlernative for now and play with the dynamic proxies until I know them. Switching later should not cause big interface changes.','AAAAA3///MI=',591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX////4='),(127,5,'2010-04-28 15:04:02','P',1,'Done','AAAAA3///MA=',591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX////k='),(154,5,'2010-04-28 15:04:02','P',1,'added a specific exception for the LOCK_FAILURE return code. For all the other exceptions I wrap it into a JGitInternalException .','AAAAA3///L8=',591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX////Y='),(89,1,'2010-04-28 16:55:30','P',1,'I disagree that we need to check the state on every setter method.\n\nIf the user modifies the command after they\'ve invoked call(), they get whatever they get.  In the case of CommitCommand, nothing happens.  In the case of LogCommand, their RevWalk internally might get screwed up so the active Iterator returned from their Iterable might get screwed up.  But if they\'ve completed the iteration, it might not be a problem.\n\nMost people won\'t make the mistake of using a command twice, because they will invoke the setters in a single statement followed by call() and be done.  Since call() returns a type that isn\'t the command, its somewhat more difficult to invoke a setter and change the command after the call() was made.\n\nBut, if you think its better to fail-fast on the setters, I can go along with that.\n\nIf we fail-fast on the setters, yes, a RuntimeException like IllegalStateException is going to be better choice than a checked exception that extends from our GitAPIException type.\n\nIf we are going to fail-fast in the setters, the easier that is to program, the better, because authors will forget to put in the checkState() invocations.  So some sort of dynamic proxy might be a good idea.  But it means we have to write a public interface for the command, and then a private implementation class that implements the interface.  And Git just acts as a factory for the dynamic proxy.  This pattern may be a bit more work for the author than always calling checkState() in each setter method, but it is easier to ensure its working correctly.\n\nUsing Java\'s native Proxy class is portable without adding additional dependencies.  So I would start with that.  It may not be as fast or as efficient as doing compile-type byte-code modifications via AspectJ, or runtime code generation via ObjectWeb ASM.  But the Git API stuff isn\'t going to be performance critical for setting up a command object, so I think we can eat the reflection overhead right now.  Besides, if we ever were to change to a different implementation method, having the interface and implementation class would probably also be required there too, so switching would be easy.','AAALuX////4=',591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX///+M='),(41,1,'2010-04-27 23:34:26','P',1,'Invented?  Or thrown?  I think thrown sounds better here.',NULL,591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/GitAPIException.java','AAAAA3///MQ='),(41,5,'2010-04-28 15:04:02','P',1,'was not sure about that. From the point of an end-user our API throws more than GitAPIExceptions: UnmergedPathExceptions, ... . If \"throwing\" means that only those exceptions count that are instantiated in the API you are right. I\'ll change it to throwing','AAAAA3///MQ=',591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/GitAPIException.java','AAALuX////8='),(53,4,'2010-04-27 23:58:12','P',1,'s/and/an/',NULL,591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/JGitInternalException.java','AAAAA3///Ls='),(53,5,'2010-04-28 15:04:02','P',1,'Done','AAAAA3///Ls=',591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/JGitInternalException.java','AAALuX////U='),(139,1,'2010-04-27 23:34:26','P',1,'I still think these should use AnyObjectId as their parameter types.',NULL,591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///L0='),(87,1,'2010-04-27 23:34:26','P',1,'s/Commit/Log/ ?',NULL,591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAAAA3///L4='),(139,5,'2010-04-28 15:04:02','P',1,'Done','AAAAA3///L0=',591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAALuX////M='),(87,5,'2010-04-28 15:04:02','P',1,'Done','AAAAA3///L4=',591,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAALuX////Q='),(150,1,'2010-04-28 16:55:56','P',1,'I like the idea of not marking it executed until its successful.',NULL,591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX///+A='),(158,1,'2010-04-28 16:55:56','P',1,'We probably should include the status here.  Its nice to know NO_CHANGE (should be nearly impossible) from IO_EXCEPTION when a user reports a problem.  These are different errors that we\'d suggest looking at different things for.',NULL,591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX///+E='),(152,1,'2010-04-28 16:55:56','P',1,'Its not just LOCK_FAILURE.  There\'s also REJECTED, which means someone else committed to the branch between when we read it above, and now when we try to update it.\n\nBut I think that\'s it, all of the other states are internal exceptions.',NULL,591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX///+I='),(158,5,'2010-04-28 20:50:30','P',1,'Done','AAALuX///+E=',591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX///9o='),(152,5,'2010-04-28 20:50:30','P',1,'Done','AAALuX///+I=',591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX///9s='),(150,5,'2010-04-28 20:50:30','P',1,'yes, I also. That\'s what I am trying to do here - mark it just before the return.','AAALuX///+A=',591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX///9w='),(48,1,'2010-04-28 16:55:56','P',1,'Since we know exactly what reference was the problem, and what the underlying RefUpdate.Result was at the time we create this exception, should we expose those as fields so the caller can inspect the failure if they care to know?  And if they don\'t then they can just rely on the message string.\n\nOr maybe exposing that is too much information.  I don\'t really know.',NULL,591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/ConcurrentRefUpdateException.java','AAALuX///+o='),(48,5,'2010-04-28 20:50:30','P',1,'I was also not sure and thought that this exception would be used later in other situations also. But you are right: for all situations I can think of where I can throw this exception I will have the Ref and a returncode from RefUpdate.update() in hand. And this is info is usefull for the call. So I added these properties.','AAALuX///+o=',591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/ConcurrentRefUpdateException.java','AAALuX///9k='),(90,1,'2010-04-28 16:55:56','P',1,'If our setters in commands are going to fail-fast about single-execution, we should fail-fast here too about a null pointer being passed in for Repository.  NPE right away in the constructor rather than deferred:\n\n  Git git = new Git(null);\n  git.commit().setMessage(\"Test\").call()\n\nWe should NPE on the first line of that, not the second.',NULL,591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAALuX///94='),(90,5,'2010-04-28 20:50:30','P',1,'Done','AAALuX///94=',591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java','AAALuX///9g='),(65,1,'2010-04-28 16:55:56','P',1,'Shouldn\'t this be final?',NULL,591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/GitCommand.java','AAALuX///+k='),(71,1,'2010-04-28 16:55:56','P',1,'Are we ever going to use this for something other than \"already executed\"?  I can\'t see how we would want to.  So I wonder if this shouldn\'t be named more explicitly than just \"state\".  Perhaps call it \"called\", but invert the value, so it defaults to false, and checkState() requires it to be false, and setCalled() can be called to set it to true?',NULL,591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/GitCommand.java','AAALuX///+Y='),(65,5,'2010-04-28 20:50:30','P',1,'Done','AAALuX///+k=',591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/GitCommand.java','AAALuX///9c='),(71,5,'2010-04-28 20:50:30','P',1,'This property had in his small history half a dozen names (always a bad sign, right?). \"invoked\", \"invocationAllowed\" .... But finally I decided to be very generic and don\'t tie myself here to invocation counting. Two reasons: With this naming I can describe the functionality of this class without making assumptions about the subclasses. I know that every subclass must have a call method but I don\'t know how many other methods exists. Some of them may call checkState(), some not (e.g. getter methods in the subclasses).\n\nAnother reason: maybe, someday, we\'ll have other situations detected in subclasses which make the command \"uncallable\". I would like to be open to this.','AAALuX///+Y=',591,5,'org.eclipse.jgit/src/org/eclipse/jgit/api/GitCommand.java','AAALuX///9Y='),(107,5,'2010-04-30 12:16:18','P',1,'Done','AAALuX///68=',591,6,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAALuX///60='),(115,8,'2010-04-30 09:46:20','P',1,'spelling: change caught to catch',NULL,591,6,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAALuX///64='),(107,8,'2010-04-30 09:46:20','P',1,'spelling: change caught to catch',NULL,591,6,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAALuX///68='),(115,5,'2010-04-30 12:16:18','P',1,'Done','AAALuX///64=',591,6,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAALuX///6w='),(113,5,'2010-04-30 12:16:18','P',1,'Done','AAALuX///7E=',591,6,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX///6s='),(113,8,'2010-04-30 06:35:58','P',1,'Style: declare these two where they are initialized',NULL,591,6,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALuX///7E='),(110,5,'2010-04-30 12:16:18','P',1,'Not sure about that. There might be some error situations which for example represent only temporal problem and for which it would make sense to wait a second and try it again with the same set options.\n(Somebody locks currently something Log needs).\nIn other situation\'s you may receive and exception and based on the exception type you reset an option to a different and retry the command (e.g. setch errors \"server not available\" where you might try again with another protocol).\nSo in general I think a good contract could be: \"Only one succesful call to call() per instance. Or: only one result per instance.\n\nOr?','AAALuX///7M=',591,6,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAALuX///6o='),(110,8,'2010-04-30 06:35:58','P',1,'what about errors? Is it ok to retry execution of a partially failed command?',NULL,591,6,'org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java','AAALuX///7M='),(29,44,'2010-04-23 08:24:26','d',1,'Done','AAAAA3///cs=',592,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CompareWithRevisionAction.java','AAAAA3///cA='),(29,63,'2010-04-22 23:15:42','P',1,'The API says null can be returned, we should check for this.',NULL,592,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CompareWithRevisionAction.java','AAAAA3///cs='),(335,44,'2010-04-23 08:45:32','d',1,'Done','AAAAA3///c0=',592,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java','AAAAA3///b0='),(353,44,'2010-04-23 08:51:44','d',1,'Done','AAAAA3///cw=',592,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java','AAAAA3///bk='),(341,44,'2010-04-23 08:49:38','d',1,'It is not intended to be stored. But I think it makes sense to explicitly couple the checked stae to the variable value at the beginning.','AAAAA3///c4=',592,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java','AAAAA3///bs='),(335,63,'2010-04-22 23:15:42','P',1,'I think we should explicitly spec that this action is a check item by using IAction.AS_CHECK_BOX.',NULL,592,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java','AAAAA3///c0='),(341,63,'2010-04-22 23:15:42','P',1,'It seems like this is guaranteed to be \'false\' when the view is brought up in the beginning. Is it the intent that this value will be persisted between the view being opened/closed? If not it seems like this line should just go away.',NULL,592,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java','AAAAA3///c4='),(353,63,'2010-04-22 23:15:42','P',1,'It seems wrong to me that we invert what was set and then let the action set it back. :P\n\nHow about we just take the option as is and then do compareModeAction.setChecked(compareMode)?',NULL,592,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java','AAAAA3///cw='),(86,9,'2010-04-27 14:15:08','d',1,'Done','AAAAA3///WY=',598,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.java','AAAAA3///Ow='),(86,1,'2010-04-26 14:39:18','P',1,'FYI, typo here in this method name, Chetkout isn\'t an English word.  :-)',NULL,598,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.java','AAAAA3///WY='),(14,1,'2010-04-26 14:39:18','P',1,'These are insanely short translation texts.  I wonder if we shouldn\'t be using some sort of context here as part of the key.  E.g. call this remoteNameMetaVar instead of just name.  Translators might need to use a different term for a variable meant to be a remote name from some other context where a \"name\" is used.',NULL,598,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.properties','AAAAA3///WA='),(3,1,'2010-04-26 14:39:18','P',1,'We probably should keep this file sorted by key.  If we\'re going to use the same file for all commands, and thus enable translation reuse (which makes a lot of sense), we should at least try to keep the catalog organized so its easier to locate a particular key when we need to.',NULL,598,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.properties','AAAAA3///WE='),(14,9,'2010-04-28 11:47:06','d',1,'Done','AAAAA3///WA=',598,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.properties','AAALuX////s='),(3,9,'2010-04-28 11:47:01','d',1,'Done','AAAAA3///WE=',598,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.properties','AAALuX////w='),(65,1,'2010-04-26 14:39:18','P',1,'FYI, these strings aren\'t translating.  To get them to translate you need to modify Main.java\'s execute() method.  I take it you just haven\'t gotten that far yet in the change\'s development.',NULL,598,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java','AAAAA3///WI='),(65,9,'2010-04-28 12:02:56','d',1,'Done','AAAAA3///WI=',598,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java','AAALuX////o='),(189,1,'2010-04-26 14:39:18','P',1,'Creating the local variable is probably not necessary.  You can just call getResourceBundle() the two times its needed, and let the method return it.  The bundle is cached and fast enough to access from the error code path.',NULL,598,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java','AAAAA3///WQ='),(188,1,'2010-04-26 14:39:18','P',1,'If we\'re going to make a writer around System.err, I think I would prefer to just use that throughout this method.  So do this at the start, and replace the System.err.print* invocations with calls to your writer that you are sharing with the args4j library.',NULL,598,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java','AAAAA3///WU='),(189,9,'2010-04-28 12:15:39','d',1,'Done','AAAAA3///WQ=',598,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java','AAALuX////c='),(188,9,'2010-04-28 12:13:35','d',1,'Done','AAAAA3///WU=',598,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java','AAALuX////g='),(5,4,'2010-05-18 14:04:41','P',1,'again trailing whitespace',NULL,598,2,'org.eclipse.jgit.console/resources/org/eclipse/jgit/console/ConsoleText.properties','AAALun///b8='),(4,4,'2010-05-18 14:04:41','P',1,'is this trailing whitespace intentionally added ?',NULL,598,2,'org.eclipse.jgit.console/resources/org/eclipse/jgit/console/ConsoleText.properties','AAALun///cA='),(5,9,'2010-05-19 15:05:09','P',1,'Intentionally. See the previous answer.','AAALun///b8=',598,2,'org.eclipse.jgit.console/resources/org/eclipse/jgit/console/ConsoleText.properties','AAALun///U0='),(4,9,'2010-05-19 15:05:09','P',1,'Yes it is intentional. The relevant piece of code before before string\nexternalization was:\nchar[] password = cons.readPassword(\"Password: \");','AAALun///cA=',598,2,'org.eclipse.jgit.console/resources/org/eclipse/jgit/console/ConsoleText.properties','AAALun///U4='),(89,4,'2010-05-18 14:04:41','P',1,'should we use camel case here ?\ns/expectedrepositoryAttribute/expectedRepositoryAttribute/',NULL,598,2,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAALun///b4='),(89,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///b4=',598,2,'org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ServletUtils.java','AAALun///Us='),(449,9,'2010-05-19 15:05:09','P',1,'Here is my question about that and the answer from Shawn Pearce:\n> 1. How to decide if a text should or shouldn\'t be translated? Is it only error message as stated above?\n>    I assume (j)git output should stay parsable and some texts mustn\'t be translated. Right?\n\nIMHO, if the text is an english message that isn\'t a string required\nfor a file name or file content or network protocol keyword, we\nshould translate it.  That\'s *most* of the strings in the JGit code.','AAALun///Ys=',598,2,'org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogGenerator.java','AAALun///UY='),(449,8,'2010-05-18 20:34:38','P',1,'Does translating internal errors like this make sense?',NULL,598,2,'org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogGenerator.java','AAALun///Ys='),(205,9,'2010-05-19 15:05:09','P',1,'The loginFailed is (re)used 3 times within this class. Check the lines 189, 197 and 203. I think it makes sense to reuse it in this case.\nOtherwise we would have 3 times the same string prefix in the resourcebundle:\nloginFailed1=Login as {0} to {1} failed: {2}: {3}\nloginFailed2=Login as {0} to {1} failed: {2}: Response not HTML as expected\nloginFailed3=Login as {0} to {1} failed: {2}: page title was \"{3}\"','AAALun///Yw=',598,2,'org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IPZillaQuery.java','AAALun///Uc='),(205,8,'2010-05-18 20:34:38','P',1,'Splitting this into two translations makes little sense.',NULL,598,2,'org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IPZillaQuery.java','AAALun///Yw='),(27,4,'2010-05-18 14:04:41','P',1,'this looks like a change not correlated to string externalization',NULL,598,2,'org.eclipse.jgit.pgm/META-INF/MANIFEST.MF','AAALun///bs='),(27,9,'2010-05-19 15:05:09','P',1,'The org.eclipse.jgit.test project needs to import CLIText from this package because of the TestStringExternalization test which verifies that there are no missing translation keys in resource bundles associated to the translation bundle classes (CLIText being one of them).','AAALun///bs=',598,2,'org.eclipse.jgit.pgm/META-INF/MANIFEST.MF','AAALun///UU='),(13,4,'2010-05-18 14:04:41','P',1,'trailing whitespace',NULL,598,2,'org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties','AAALun///bo='),(13,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///bo=',598,2,'org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties','AAALun///UQ='),(60,4,'2010-05-18 14:04:41','P',1,'why some line breaks more than in the original println ?',NULL,598,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadDirCache.java','AAALun///bg='),(64,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///Yo=',598,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadDirCache.java','AAALun///UA='),(60,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///bg=',598,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadDirCache.java','AAALun///UE='),(64,8,'2010-05-18 20:34:38','P',1,'I think this is better translated using one string.\nOne thing about translations is that they sometimes change orders of things and the original author doesn\'t know all language conventions and styles.\n\ne.g. suppose it looks better to say (roughly) in some language\n\naverage (ms/read):  nnnn\n\nDoesn\'t help us if milliseconds is not a viable unit, but then we can\'t think of everything :)',NULL,598,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadDirCache.java','AAALun///Yo='),(73,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///Yk=',598,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowCacheTree.java','AAALun///T8='),(73,8,'2010-05-18 20:34:38','P',1,'One string only so transaltors can use their language conventions.\n\nI think „German“ and »French« people prefer a different type of quotes',NULL,598,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowCacheTree.java','AAALun///Yk='),(132,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///Yg=',598,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/AbstractTreeIteratorHandler.java','AAALun///T4='),(132,8,'2010-05-18 20:34:38','P',1,'move the \":\" + e.getMessage() into the translation to. (e.getMessage() as a parameter)',NULL,598,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/AbstractTreeIteratorHandler.java','AAALun///Yg='),(202,4,'2010-05-18 14:04:41','P',1,'typo: s/used/be/',NULL,598,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java','AAALun///bk='),(202,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///bk=',598,2,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java','AAALun///UM='),(130,4,'2010-05-18 14:04:41','P',1,'camel case ?\ns/authenticationrequired/authenticationRequired/',NULL,598,2,'org.eclipse.jgit.ui/src/org/eclipse/jgit/awtui/AwtAuthenticator.java','AAALun///bY='),(130,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///bY=',598,2,'org.eclipse.jgit.ui/src/org/eclipse/jgit/awtui/AwtAuthenticator.java','AAALun///T0='),(8,4,'2010-05-18 14:04:41','P',1,'trailing whitespace',NULL,598,2,'org.eclipse.jgit/META-INF/MANIFEST.MF','AAALun///bU='),(8,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///bU=',598,2,'org.eclipse.jgit/META-INF/MANIFEST.MF','AAALun///Tw='),(239,4,'2010-05-18 14:04:41','P',1,'no argument ?',NULL,598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///a0='),(238,4,'2010-05-18 14:04:41','P',1,'no argument ?',NULL,598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///a4='),(244,4,'2010-05-18 14:04:41','P',1,'no argument ?',NULL,598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///a8='),(301,4,'2010-05-18 14:04:41','P',1,'redundant copy of same property',NULL,598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///ak='),(281,4,'2010-05-18 14:04:41','P',1,'redundant copy of same property',NULL,598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///ao='),(275,4,'2010-05-18 14:04:41','P',1,'trailing whitespace ?',NULL,598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///as='),(240,4,'2010-05-18 14:04:41','P',1,'no argument ?',NULL,598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///aw='),(237,4,'2010-05-18 14:04:41','P',1,'no argument ?',NULL,598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///bA='),(214,4,'2010-05-18 14:04:41','P',1,'looks incomplete',NULL,598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///bE='),(173,4,'2010-05-18 14:04:41','P',1,'anything missing here ? key looks like some \"incorrect object type\" is missing',NULL,598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///bI='),(166,4,'2010-05-18 14:04:41','P',1,'property name could be more specific',NULL,598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///bM='),(123,4,'2010-05-18 14:04:41','P',1,'3 redundant copies of the same text',NULL,598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///bQ='),(301,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///ak=',598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///TA='),(237,9,'2010-05-19 15:05:09','P',1,'There was no argument, at least not directly:\n				throw new TransportException(transport.uri, \"not a bundle\");\n\nTransportException itself does some string join:\n	public TransportException(final URIish uri, final String s) {\n		super(uri.setPass(null) + \": \" + s);\n	}\n\nBut this was too far for a \"simple\" string externalization task :-)','AAALun///bA=',598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///Tc='),(281,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///ao=',598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///TE='),(214,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///bE=',598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///Tg='),(275,9,'2010-05-19 15:05:09','P',1,'Intentionally. Was like:\n	private static final String PFX_REMOTE = \"remote: \";','AAALun///as=',598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///TI='),(173,9,'2010-05-19 15:05:09','P',1,'No.\nIt was exactly like that, for example in PackWriter.java:\n		throw new IncorrectObjectTypeException(object,\n					\"COMMIT nor TREE nor BLOB nor TAG\");','AAALun///bI=',598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///Tk='),(244,9,'2010-05-19 15:05:09','P',1,'Similar case like for the TransportException above.\n		return new NoRemoteRepositoryException(uri, JGitText.get().notFound);\n\nand the NoRemoteRepositoryException looks like:\npublic class NoRemoteRepositoryException extends TransportException {\n	...\n	public NoRemoteRepositoryException(final URIish uri, final String s) {\n		super(uri, s);\n	}\n}','AAALun///a8=',598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///TM='),(166,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///bM=',598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///To='),(240,9,'2010-05-19 15:05:09','P',1,'No argument. Was like that:\n		if (RawParseUtils.match(buf, 0, Constants.PACK_SIGNATURE) != 4)\n			throw new IOException(\"Not a PACK file.\");','AAALun///aw=',598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///TQ='),(123,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///bQ=',598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///Ts='),(239,9,'2010-05-19 15:05:09','P',1,'the same reason as for the notABundle above.','AAALun///a0=',598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///TU='),(238,9,'2010-05-19 15:05:09','P',1,'Yes, no argument. Was like that:\n		if (!is_DIRC(hdr))\n			throw new CorruptObjectException(\"Not a DIRC file.\");\nin DirCache.java','AAALun///a4=',598,2,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///TY='),(67,9,'2010-05-19 15:05:09','P',1,'I wasn\'t sure about cases like this one. \"message\" could be anything.\nWhat should be the name of the translation key if the message is included? How would this look like in the resource bundle:\n\n	refUpdateReturnCodeWas={0}. RefUpdate return code was: {1}\n\nI also know that as it is now is not ideal but at least the entry in resource bundle looks well defined:\n\n	refUpdateReturnCodeWas=RefUpdate return code was: {0}\n\nLet me know your final opinion on that.','AAALun///Yc=',598,2,'org.eclipse.jgit/src/org/eclipse/jgit/api/ConcurrentRefUpdateException.java','AAALun///S8='),(67,8,'2010-05-18 20:34:38','P',1,'Shouldn\'t the position of message in the resulting string  be made by the translator?',NULL,598,2,'org.eclipse.jgit/src/org/eclipse/jgit/api/ConcurrentRefUpdateException.java','AAALun///Yc='),(79,9,'2010-05-19 15:05:09','P',1,'Again, here is the answer from Shawn on this question:\n> 1. How to decide if a text should or shouldn\'t be translated? Is it only error message as stated above?\n>    I assume (j)git output should stay parsable and some texts mustn\'t be translated. Right?\n\nIMHO, if the text is an english message that isn\'t a string required\nfor a file name or file content or network protocol keyword, we\nshould translate it.  That\'s *most* of the strings in the JGit code.','AAALun///YY=',598,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java','AAALun///S4='),(79,8,'2010-05-18 20:34:38','P',1,'I\'m not convinced programmer errors should be translated',NULL,598,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java','AAALun///YY='),(298,9,'2010-05-19 15:05:09','P',1,'well, this is exception text not just System.err.print.\nWe need clear criteria what should (not) be externalized and especially\nwhat are debugging printouts and what are not.\nI would like to get another opinion on this topic.','AAALun///YU=',598,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAALun///S0='),(526,9,'2010-05-19 15:05:09','P',1,'same like previous reply','AAALun///YI=',598,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAALun///So='),(312,9,'2010-05-19 15:05:09','P',1,'same like previous reply','AAALun///YM=',598,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAALun///Ss='),(305,9,'2010-05-19 15:05:09','P',1,'same like previous reply','AAALun///YQ=',598,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAALun///Sw='),(526,8,'2010-05-18 20:34:38','P',1,'This main is a test utiliyty. Don\'t translate',NULL,598,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAALun///YI='),(312,8,'2010-05-18 20:34:38','P',1,'Debugging printouts. Don\'t translate',NULL,598,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAALun///YM='),(305,8,'2010-05-18 20:34:38','P',1,'Debugging printouts. Don\'t translate',NULL,598,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAALun///YQ='),(298,8,'2010-05-18 20:34:38','P',1,'Debugging printouts. Don\'t translate',NULL,598,2,'org.eclipse.jgit/src/org/eclipse/jgit/diff/MyersDiff.java','AAALun///YU='),(346,9,'2010-05-19 15:05:09','P',1,'Well, OK, added it.\nHowever, this is definitely not the only place where Non-NLS comment would be needed.\nThis is a huge change and I would like to get it through without having to rebase several times and redo string externalization each time.\n\nCould we agree to have another follow-up change where we ensure to have NON-NLS comments for non externalized strings and ensure\nto have design/compile time checks for that?','AAALun///YA=',598,2,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Commit.java','AAALun///Sk='),(346,8,'2010-05-18 20:34:38','P',1,'Add Non-NLS comment',NULL,598,2,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Commit.java','AAALun///YA='),(148,9,'2010-05-19 15:05:09','P',1,'the concatenation with empty string \"\" was necessary to tell Java\nto perform character concatenation.\n\nWithout the (empty) string concatenation Java threats these (char)s\nas numbers and performs arithmetical plus operation. Thanks to\ntest failure I was able to spot that.','AAALun///X0=',598,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java','AAALun///Sg='),(148,8,'2010-05-18 20:34:38','P',1,'` part of transaltion?',NULL,598,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java','AAALun///X0='),(256,4,'2010-05-18 14:04:41','P',1,'shouldn\'t that be sourceIsNotAWildcard ?',NULL,598,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefSpec.java','AAALun///ag='),(256,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///ag=',598,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/RefSpec.java','AAALun///Sc='),(371,4,'2010-05-18 14:04:41','P',1,'maybe more specific: serviceCannotOpen',NULL,598,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAALun///ac='),(371,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///ac=',598,2,'org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java','AAALun///SY='),(193,4,'2010-05-18 14:04:41','P',1,'should be shortSkipOfBlock',NULL,598,2,'org.eclipse.jgit/src/org/eclipse/jgit/util/IO.java','AAALun///aY='),(193,9,'2010-05-19 15:05:09','P',1,'Done','AAALun///aY=',598,2,'org.eclipse.jgit/src/org/eclipse/jgit/util/IO.java','AAALun///SU='),(5,1,'2010-05-19 21:26:35','P',1,'Ditto.',NULL,598,3,'org.eclipse.jgit.console/resources/org/eclipse/jgit/console/ConsoleText.properties','AAALun///RU='),(4,1,'2010-05-19 21:26:35','P',1,'IMHO, we shouldn\'t have trailing spaces in translated messages.    Some editors might strip it, and Git/Gerrit show this as an \"error\".  Since this is a prompt, we probably want to offset it in the UI anyway no matter what language is involved.  So we probably should handle that in the UI *code* not the translation bundle.',NULL,598,3,'org.eclipse.jgit.console/resources/org/eclipse/jgit/console/ConsoleText.properties','AAALun///RY='),(10,1,'2010-05-19 21:26:35','P',1,'Why a trailing space?',NULL,598,3,'org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties','AAALun///RE='),(107,1,'2010-05-19 21:26:35','P',1,'The \"\\r\" should be part of the format string, not the argument injected into it.  Otherwise we might inject it at the wrong position.',NULL,598,3,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java','AAALun///RA='),(184,1,'2010-05-19 21:26:35','P',1,'Note, these [deleted], [new branch], [no match], [rejected] messages in this section of code probably should be translated.  They are meant for the user.',NULL,598,3,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Push.java','AAALun///Q8='),(86,1,'2010-05-19 21:26:35','P',1,'I don\'t get why the translation support change needs to add all of these dependencies to the core library test suite.',NULL,598,3,'org.eclipse.jgit.test/pom.xml','AAALun///Q4='),(58,1,'2010-05-19 21:26:35','P',1,'Oh.  That\'s why you added the dependencies.  I\'d rather this be in a different test package.',NULL,598,3,'org.eclipse.jgit.test/tst/org/eclipse/jgit/stringext/TestStringExternalization.java','AAALun///Q0='),(163,1,'2010-05-19 21:26:35','P',1,'IIRC on J2SE when the locale isn\'t en derived, this test will fail, because the exception is translated.  :-)',NULL,598,3,'org.eclipse.jgit/src/org/eclipse/jgit/util/HttpSupport.java','AAALun///Qw='),(240,1,'2010-04-26 14:41:40','P',1,'Should we instead put this into a utility class?  The method is used twice, which is probably why we put it into the Activator in the first place... to avoid duplicating it.',NULL,600,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitGraphTable.java','AAAAA3///V0='),(63,1,'2010-04-27 14:19:35','P',1,'Should we try to print a short summary of the commit that was just created, similar to what C Git does?\n\n  $ git commit\n  [pack-bugs 374c280] Don\'t insert the same pack twice into a pack list\n   1 files changed, 13 insertions(+), 0 deletions(-)\n\nMaybe we skip the status line right now, but print that first line listing the branch, commit SHA-1, and subject line.',NULL,603,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Commit.java','AAAAA3///Og='),(58,1,'2010-04-27 14:19:35','P',1,'Style-nit: Spaces around operators (=, !=, etc.)',NULL,603,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Commit.java','AAAAA3///Ok='),(51,1,'2010-04-27 14:19:35','P',1,'Style-nit:  We tag the option/argument fields private.',NULL,603,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Commit.java','AAAAA3///Oo='),(47,1,'2010-04-27 14:19:35','P',1,'FYI, the native git commit command uses the environment variables GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, and GIT_COMMITTER_DATE to set the committer name.  If these aren\'t set, they are inherited from the repository and/or the current system time.',NULL,603,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Commit.java','AAAAA3///Os='),(63,5,'2010-04-29 15:59:11','P',1,'Done','AAAAA3///Og=',603,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Commit.java','AAALuX///78='),(58,5,'2010-04-29 15:59:11','P',1,'Done','AAAAA3///Ok=',603,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Commit.java','AAALuX///8Q='),(51,5,'2010-04-29 15:59:11','P',1,'Done','AAAAA3///Oo=',603,1,'org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Commit.java','AAALuX///8U='),(407,2,'2010-04-27 14:09:30','P',1,'Absolutely nothing.\n\nWe should toss both and just use handleError() for now.\n\nI left both in as they were called by other folks. Essentially it\'s a further cleanup thing that we need to do.','AAAAA3///PA=',616,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/Activator.java','AAAAA3///O8='),(407,1,'2010-04-27 14:07:49','P',1,'What is the difference between error() and logError() ?',NULL,616,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/Activator.java','AAAAA3///PA='),(132,4,'2010-04-30 21:45:57','P',1,'Why don\'t you immediately do proper error handling ?',NULL,621,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewContentProvider.java','AAALuX///5c='),(399,8,'2010-05-02 09:42:51','P',0,'Remove unused text from UIText',NULL,623,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAALuX///3U='),(460,8,'2010-05-02 09:42:51','P',0,'Remove the title from UIText too',NULL,623,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java','AAALuX///3Y='),(1318,8,'2010-05-02 09:42:51','P',0,'Remove references text from uitex',NULL,623,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java','AAALuX///3Q='),(101,63,'2010-04-28 15:58:05','P',1,'Why are we locking the entire workspace here? I do not want my CVS projects to be locked if I\'m doing a Git operation.',NULL,624,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/BranchOperation.java','AAALuX///+0='),(101,44,'2010-04-29 11:14:34','P',1,'We do not know which projects will be affected by the branch operation. It\'s e.g. possible that changes in a project are performed that resides in an EGit repo but the project is not shared with EGit.\nThus I think it\'s safer to lock the complete WS.','AAALuX///+0=',624,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/BranchOperation.java','AAALuX///+s='),(1,63,'2010-04-28 15:58:05','P',1,'Please add a license header to this file.',NULL,624,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/IEGitOperation.java','AAALuX///+4='),(1,44,'2010-04-29 11:14:34','P',1,'Done','AAALuX///+4=',624,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/IEGitOperation.java','AAALuX///+g='),(748,8,'2010-05-04 18:35:17','P',1,'1) Bad name. Suggestion: getLastModified, i.e. same as in DirCacheEntry\n\n3) Consider extending the DirCache API with the functions needed to perform whatever you need. This API is deprecated.',NULL,629,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/GitIndex.java','AAALuX///yo='),(762,4,'2010-04-30 12:51:27','P',1,'You added this method also as a separate change: http://egit.eclipse.org/r/#change,629\nIt looks like getMtime has nothing to do with stages hence it should come as separate change.',NULL,630,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/GitIndex.java','AAALuX///6c='),(156,4,'2010-05-03 20:22:51','d',1,'typo in message key s/Porject/Project/',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCreateGeneralProjectPage.java','AAALuX///0g='),(130,4,'2010-05-03 20:21:51','d',1,'style nit: extra empty line',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCreateGeneralProjectPage.java','AAALuX///0k='),(80,4,'2010-05-03 20:21:40','d',1,'style nit: extra empty line',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCreateGeneralProjectPage.java','AAALuX///0o='),(129,63,'2010-05-04 10:43:01','d',1,'The list(FilenameFilter) method could take some time if there are a lot of files. Couldn\'t we just instantiate a new File and check for exists()?',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCreateGeneralProjectPage.java','AAALuX///zg='),(40,4,'2010-05-03 20:23:56','d',1,'that\'s a funny class name',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCreateProjectViaWizardWizard.java','AAALuX///0c='),(85,4,'2010-05-03 20:27:35','d',1,'style: extra empty line (many more below)',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCreateProjectViaWizardWizard.java','AAALuX///0U='),(70,4,'2010-05-03 20:25:30','d',1,'should be marked as TODO',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCreateProjectViaWizardWizard.java','AAALuX///0Y='),(42,4,'2010-05-03 20:44:08','d',1,'I don\'t like this naming convention prefixing members with \"my\", this pattern is also not used consistently',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCreateProjectViaWizardWizard.java','AAALuX///zw='),(149,4,'2010-05-03 20:34:20','d',1,'variable name doesn\'t sound like a number',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitSelectWizardPage.java','AAALuX///0E='),(130,4,'2010-05-03 20:33:43','d',1,'this variable name doesn\'t sound like a number, maybe you find a better name',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitSelectWizardPage.java','AAALuX///0I='),(52,4,'2010-05-03 20:36:34','d',1,'style: I don\'t like this naming convention starting members with \"my\", it\'s also not used consistently',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitShareProjectsPage.java','AAALuX///0A='),(1063,4,'2010-05-03 20:40:55','d',1,'should be marked as TODO',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALuX///z4='),(540,4,'2010-05-03 20:38:51','d',1,'that\'s an unmotivated pure whitespace change',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALuX///z8='),(1023,63,'2010-05-04 02:30:25','d',1,'I suggest wrapping the code in a try/finally block.\ntry { /* do stuff */ } finally { clipboard.dispose() }',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALuX///zo='),(1018,63,'2010-05-04 02:29:34','d',1,'Seems wrong to pass in null. There are Displays lying around, so why not use it (new Clipboard(e.widget.getDisplay()))?',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALuX///zs='),(607,4,'2010-05-03 20:42:20','d',1,'typo: s/from at/from a/',NULL,631,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties','AAALuX///z0='),(51,44,'2010-04-30 15:02:41','P',1,'Second parameter of Status is the pluginId. Why to pass path here?',NULL,632,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/internal/storage/BlobStorage.java','AAALuX///50='),(61,44,'2010-04-30 15:02:41','P',1,'Second parameter of Status is the pluginId. Why to pass path here?',NULL,632,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/internal/storage/BlobStorage.java','AAALuX///5w='),(130,44,'2010-04-30 15:02:41','P',1,'Second parameter of Status is the pluginId. Why to pass path here?',NULL,632,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/internal/storage/CommitFileRevision.java','AAALuX///6A='),(124,44,'2010-04-30 15:02:41','P',1,'Second parameter of Status is the pluginId. Why to pass path here?',NULL,632,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/internal/storage/CommitFileRevision.java','AAALuX///6E='),(84,44,'2010-04-30 15:02:41','P',1,'Second parameter of Status is the pluginId. Why to pass path here?',NULL,632,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/internal/storage/IndexFileRevision.java','AAALuX///54='),(78,44,'2010-04-30 15:02:41','P',1,'Second parameter of Status is the pluginId. Why to pass path here?',NULL,632,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/internal/storage/IndexFileRevision.java','AAALuX///58='),(1,63,'2010-05-01 12:08:09','P',1,'Please add a license header to this file.',NULL,632,3,'org.eclipse.egit.core.test/src/org/eclipse/egit/core/internal/storage/BlobStorageTest.java','AAALuX///38='),(14,4,'2010-05-02 23:36:45','P',1,'since org.eclipse.egit.core.test is a test fragment now we don\'t need to make it x-friend anymore, right ?',NULL,632,5,'org.eclipse.egit.core/META-INF/MANIFEST.MF','AAALuX///14='),(115,4,'2010-05-05 12:25:51','P',1,'style: unnecessary blank line',NULL,642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWithDirectoriesPage.java','AAALun////A='),(98,4,'2010-05-05 12:25:51','P',1,'style: unnecessary blank line',NULL,642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWithDirectoriesPage.java','AAALun////E='),(65,4,'2010-05-05 12:25:51','P',1,'style: unnecessary blank line',NULL,642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWithDirectoriesPage.java','AAALun////I='),(115,46,'2010-05-05 13:00:55','P',1,'Done','AAALun////A=',642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWithDirectoriesPage.java','AAALun///+M='),(98,46,'2010-05-05 13:00:55','P',1,'Done','AAALun////E=',642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWithDirectoriesPage.java','AAALun///+Q='),(65,46,'2010-05-05 13:00:55','P',1,'Done','AAALun////I=',642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWithDirectoriesPage.java','AAALun///+U='),(82,4,'2010-05-05 12:25:51','P',1,'style: unnecessary blank line',NULL,642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWizard.java','AAALun///+0='),(70,4,'2010-05-05 12:25:51','P',1,'style: unnecessary blank line',NULL,642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWizard.java','AAALun///+4='),(52,4,'2010-05-05 12:25:51','P',1,'why have some fields the prefix \"my\" ?',NULL,642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWizard.java','AAALun///+8='),(82,46,'2010-05-05 13:00:55','P',1,'Done','AAALun///+0=',642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWizard.java','AAALun///+A='),(70,46,'2010-05-05 13:00:55','P',1,'Done','AAALun///+4=',642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWizard.java','AAALun///+E='),(52,46,'2010-05-05 13:00:55','P',1,'Done','AAALun///+8=',642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitImportWizard.java','AAALun///+I='),(284,4,'2010-05-05 12:25:51','P',1,'should be marked as TODO',NULL,642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitProjectsImportPage.java','AAALun///+w='),(284,46,'2010-05-05 13:00:55','P',1,'Done','AAALun///+w=',642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitProjectsImportPage.java','AAALun///98='),(71,4,'2010-05-05 12:25:51','P',1,'style: unnecessary blank line',NULL,642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitSelectRepositoryPage.java','AAALun///+s='),(71,46,'2010-05-05 13:00:55','P',1,'Done','AAALun///+s=',642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitSelectRepositoryPage.java','AAALun///94='),(1297,4,'2010-05-05 12:25:51','P',1,'JavaDoc missing, what is this method good for ?',NULL,642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALun///+o='),(1297,46,'2010-05-05 13:00:55','P',1,'Done','AAALun///+o=',642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALun///90='),(246,4,'2010-05-05 12:25:51','P',1,'style: unnecessary blank line',NULL,642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryTreeNode.java','AAALun///+k='),(246,46,'2010-05-05 13:00:55','P',1,'Done','AAALun///+k=',642,4,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryTreeNode.java','AAALun///9w='),(67,44,'2010-05-06 15:31:48','P',1,'Done','AAALun///9A=',650,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/DiscardChangesOperation.java','AAALun///70='),(93,44,'2010-05-06 15:31:48','P',1,'Done','AAALun///84=',650,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/DiscardChangesOperation.java','AAALun///7A='),(49,44,'2010-05-06 15:31:48','P',1,'Done','AAALun///88=',650,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/DiscardChangesOperation.java','AAALun///7E='),(119,44,'2010-05-06 15:31:48','P',1,'Done','AAALun///80=',650,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/DiscardChangesOperation.java','AAALun///7s='),(119,63,'2010-05-05 17:08:27','P',1,'Move this line down. We don\'t need to instantiate a new object if it\'s not an IContainer.',NULL,650,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/DiscardChangesOperation.java','AAALun///80='),(93,63,'2010-05-05 17:08:27','P',1,'Multiple files may be in the same repository. Would it be better to check out all the entries and then just doing one write operation against the index?\n\nIf one checkout succeeds and another fails, we\'d still want to write the \"partially modified\" index though, I think?',NULL,650,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/DiscardChangesOperation.java','AAALun///84='),(49,63,'2010-05-05 17:08:27','P',1,'Please convert the monitor to a SubMonitor and then split up appropriate work units. As is we just pass the original monitor to the discardChange(*) method which implies that the monitor may be marked as completed on just one iteration which leads to incorrect progress reporting. :(',NULL,650,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/DiscardChangesOperation.java','AAALun///88='),(67,63,'2010-05-05 17:08:27','P',1,'Why do we need to lock the whole tree if we\'re solely dealing with IFiles?',NULL,650,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/DiscardChangesOperation.java','AAALun///9A='),(52,44,'2010-05-06 15:31:48','P',1,'Done','AAALun///9E=',650,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DiscardChangesAction.java','AAALun///74='),(52,63,'2010-05-05 17:08:27','P',1,'We should set a scheduling rule for the job based on the resources.',NULL,650,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DiscardChangesAction.java','AAALun///9E='),(1131,4,'2010-05-08 20:10:23','P',1,'Done','AAALun///2w=',667,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALun///0o='),(1131,8,'2010-05-07 16:45:44','P',1,'a printstacktrace here would help to track down problems.\nReal logging would be better, but for lack of that just print on stdout',NULL,667,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALun///2w='),(98,8,'2010-05-07 17:15:31','P',1,'It is safe to use == for enums',NULL,668,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CommitAction.java','AAALun///20='),(98,4,'2010-05-08 22:35:29','P',1,'Done','AAALun///20=',668,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CommitAction.java','AAALun///y8='),(28,63,'2010-05-10 16:52:43','P',1,'Spec that \'null\' is a valid return value.',NULL,672,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/IEGitOperation.java','AAALun///uI='),(54,63,'2010-05-10 16:52:43','P',1,'Avoid using Display.getDefault() where possible. It can cause problems on win32. Use StatusManager or ask the workbench for the display (PlatformUI.getWorkbench().getDisplay()). Generally I\'d frown upon getting the display that way but it\'s better than Display.getDefault().',NULL,672,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/AddToIndexAction.java','AAALun///t8='),(57,4,'2010-05-12 23:16:00','P',1,'style nit: we don\'t use @author tags',NULL,683,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALun///n0='),(175,4,'2010-05-12 23:16:00','P',1,'not a TODO',NULL,683,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALun///nc='),(132,4,'2010-05-12 23:16:00','P',1,'not a TODO',NULL,683,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALun///ng='),(73,4,'2010-05-12 23:16:00','P',1,'I think that\'s no TODO, for a test case this is ok',NULL,683,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALun///nk='),(118,4,'2010-05-12 23:16:00','P',1,'style nit: unnecessary blank line',NULL,683,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALun///no='),(62,4,'2010-05-12 23:16:00','P',1,'style nit: one blank line is enough here',NULL,683,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALun///ns='),(201,4,'2010-05-12 23:16:00','P',1,'style: unnecessary blank line',NULL,683,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreMatcherTest.java','AAALun///nM='),(195,4,'2010-05-12 23:16:00','P',1,'style: unnecessary blank line',NULL,683,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreMatcherTest.java','AAALun///nQ='),(58,4,'2010-05-12 23:16:00','P',1,'style: one blank line only',NULL,683,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreMatcherTest.java','AAALun///nU='),(49,4,'2010-05-12 23:16:00','P',1,'style nit: one blank line is sufficient',NULL,683,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreMatcherTest.java','AAALun///nY='),(13,4,'2010-05-12 23:16:00','P',1,'package version is missing, add \";version=0.8.0\"',NULL,683,2,'org.eclipse.jgit/META-INF/MANIFEST.MF','AAALun///nI='),(102,4,'2010-05-12 23:16:00','P',1,'findbugs: reader should be closed in a finally block to prevent file descriptor leaks',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALun///lM='),(148,4,'2010-05-12 23:16:00','P',1,'findbugs: this may throw NPE if rules == null',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALun///lQ='),(98,4,'2010-05-12 23:16:00','P',1,'style: no curly braces for single line statement',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALun///m0='),(71,4,'2010-05-12 23:16:00','P',1,'typo: \".\" missing at the end of this sentence',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALun///m4='),(200,4,'2010-05-12 23:16:00','P',1,'how can this throw IOException ?',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALun///mc='),(197,4,'2010-05-12 23:16:00','P',1,'missing description',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALun///mg='),(143,4,'2010-05-12 23:16:00','P',1,'here you throw IOException, some lines below you catch it, this looks inconsistent ?',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALun///mk='),(139,4,'2010-05-12 23:16:00','P',1,'missing description',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALun///mo='),(106,4,'2010-05-12 23:16:00','P',1,'style: no braces around single line block',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALun///mw='),(57,4,'2010-05-12 23:16:00','P',1,'style: we don\'t use @author tags',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALun///nA='),(53,4,'2010-05-12 23:16:00','P',1,'style: extra blank line, you have a lot of extra blank lines in this class',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALun///nE='),(108,4,'2010-05-12 23:16:00','P',1,'FindBugs says for better performance you should better use Character.valueOf(char) instead of new Character(char).\n\nsee pattern DM_NUMBER_CTOR in\nhttp://findbugs.sourceforge.net/bugDescriptions.html',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALun///lU='),(227,4,'2010-05-12 23:16:00','P',1,'Better name for this method ? getResult sounds quite generic.',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALun///mI='),(223,4,'2010-05-12 23:16:00','P',1,'can we enforce that apply has been called before and throw an exception if this wasn\'t done ?',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALun///mM='),(228,4,'2010-05-12 23:16:00','P',1,'this looks funny, maybe a better name than \"negation\" would help readability',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALun///mQ='),(116,4,'2010-05-12 23:16:00','P',1,'you should also explain the meaning of \"!\"',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALun///mU='),(51,4,'2010-05-12 23:16:00','P',1,'style: we don\'t use @author tags\n\nJavaDoc missing for public class',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALun///mY='),(138,4,'2010-05-12 23:16:00','P',1,'style: no braces for single line',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALun///l0='),(132,4,'2010-05-12 23:16:00','P',1,'style: no braces for single line',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALun///l4='),(123,4,'2010-05-12 23:16:00','P',1,'missing description',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALun///l8='),(211,4,'2010-05-12 23:16:00','P',1,'style: no braces for single line',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALun///lc='),(205,4,'2010-05-12 23:16:00','P',1,'style: no braces for single line',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALun///lg='),(198,4,'2010-05-12 23:16:00','P',1,'style: extra blank line',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALun///lk='),(184,4,'2010-05-12 23:16:00','P',1,'style: no braces for single line',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALun///lo='),(175,4,'2010-05-12 23:16:00','P',1,'style: extra blank in front of first tab\n\ncan we raise an exception if used on base directory ?',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALun///ls='),(164,4,'2010-05-12 23:16:00','P',1,'style: no braces for single line',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALun///lw='),(106,4,'2010-05-12 23:16:00','P',1,'style: no braces for single line',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALun///mA='),(76,4,'2010-05-12 23:16:00','P',1,'description missing',NULL,683,2,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALun///mE='),(17,63,'2010-05-13 21:05:44','P',1,'Probably should use the same version numbers as the other packages.',NULL,683,5,'org.eclipse.jgit.test/META-INF/MANIFEST.MF','AAALun///jY='),(87,63,'2010-05-13 21:05:44','P',1,'This stack trace, and all the other ones like it in this file, will never get printed because the fail(String) method itself will cause an exception to be thrown.\n\nPersonally, I tend to just declare exceptions in the test method though I don\'t know what\'s the JGit convention here.',NULL,683,5,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALun///jg='),(13,63,'2010-05-13 21:05:44','P',1,'Should add a version identifier.',NULL,683,5,'org.eclipse.jgit/META-INF/MANIFEST.MF','AAALun///jc='),(106,63,'2010-05-13 21:05:44','P',1,'Close the reader when you\'re done with it.',NULL,683,5,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALun///jk='),(259,4,'2010-06-16 22:06:54','d',1,'extra blank line',NULL,683,8,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALvX////c='),(224,4,'2010-06-16 22:06:29','d',1,'extra blank line',NULL,683,8,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALvX////g='),(152,4,'2010-06-16 22:05:48','d',1,'extra blank line',NULL,683,8,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALvX////k='),(118,4,'2010-06-16 22:05:08','d',1,'unnecessary extra blank line',NULL,683,8,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALvX////o='),(106,4,'2010-06-16 22:04:39','d',1,'nit pick: we don\'t use braces on one line blocks',NULL,683,8,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALvX////s='),(315,4,'2010-06-16 22:08:12','d',1,'extra blank lines',NULL,683,8,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALvX////U='),(58,4,'2010-06-16 22:03:38','d',1,'we don\'t use author tags',NULL,683,8,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALvX////w='),(274,4,'2010-06-16 22:07:39','d',1,'style nit: no braces around single line blocks (more below)',NULL,683,8,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALvX////Y='),(53,4,'2010-06-16 22:08:44','d',1,'style nit: we don\'t use author tags',NULL,683,8,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreMatcherTest.java','AAALvX////Q='),(108,1,'2010-06-16 22:56:36','P',1,'Style-nit: Useless catch/throw.  Just don\'t declare the catch, and it\'ll throw on its own to the caller.',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALvn////Y='),(103,4,'2010-06-16 22:12:30','d',1,'style nit: avoid brace around single line block',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALvX////A='),(71,4,'2010-06-16 22:11:41','d',1,'typo: period missing: (if any).',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALvX////E='),(67,4,'2010-06-16 22:10:47','d',1,'style nit: one blank line is sufficient (more below)',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALvX////I='),(57,4,'2010-06-16 22:10:02','d',1,'style nit: no author tags please',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALvX////M='),(147,4,'2010-06-16 22:13:10','d',1,'style nit: no braces around single line',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALvX///+4='),(179,4,'2010-06-16 22:14:12','d',1,'style nit: no braces here',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALvX///+s='),(173,4,'2010-06-16 22:13:50','d',1,'style nit: no braces around single line',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALvX///+w='),(176,1,'2010-06-16 22:56:36','P',1,'Style-nit: Unnecessary parents around target.',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALvn////c='),(110,1,'2010-06-16 22:56:36','P',1,'Please don\'t print stack traces to system.err, they are hard to discover within Eclipse.',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALvn////g='),(221,1,'2010-06-16 22:56:36','P',1,'What is apply?',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALvn////k='),(212,4,'2010-06-16 22:17:52','d',1,'style nit: one blank line is sufficient',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALvX///+g='),(51,4,'2010-06-16 22:15:34','d',1,'style nit: we don\'t use author tags\n\njavadoc is missing here',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALvX///+k='),(125,1,'2010-06-16 22:56:36','P',1,'Please use\n\n  new File(basePath, \".gitignore\")\n\nInstead of string concat with the platform specific \"/\" character.',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvX///+A='),(54,4,'2010-06-16 22:18:31','d',1,'we don\'t use author tags',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvX///+c='),(83,1,'2010-06-16 22:56:36','P',1,'Style-nit:  Only one blank line between methods.',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvX///+E='),(54,1,'2010-06-16 22:56:36','P',1,'We tend not to include @author tags in the project.',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvX///+I='),(133,4,'2010-06-16 22:20:07','d',1,'no braces here',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvX///+M='),(107,4,'2010-06-16 22:19:46','d',1,'style nit: no braces here',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvX///+Q='),(101,4,'2010-06-16 22:19:32','d',1,'style nit: no braces around single line',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvX///+U='),(82,4,'2010-06-16 22:19:01','d',1,'some extra blank lines',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvX///+Y='),(185,1,'2010-06-16 22:56:36','P',1,'Instead of taking the java.io.File, I\'d prefer to take a String that is the path from the root of the repository.\n\nThe reason is, we should be processing ignore information at the same time that we are walking through trees with a TreeWalk.  That does this parallel walk thing, and we should be able to have the ignore rules run as part of it and tell us if the current path is considered to be ignored, or not.\n\nBecause TreeWalk does this sorted-name, depth-first traversal of the repository structure, you can have the cache keep track of where you are as you enter/exit directories and apply only the correct set of .gitignore as you go.\n\nFurther, if the ignore code can be given a WorkingTreeIterator, it can ask that iterator at each level whether or not a .gitignore name even exists.  That avoids a stat hit at each level to see if the file even exists (and it usually doesn\'t).  Where it does exist, you can also use the WorkingTreeIterator to tell you the last modified time and length of the file, so you can decide if its worth reading the file again, or keeping the cached copy you might have in memory.\n\nSo, this is a nice start, but its not quite the way I had hoped we could build the ignore support.',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvX///90='),(131,1,'2010-06-16 22:56:36','P',1,'Please use the Repository\'s getDirectory() to determine .git.  Assuming the git directory is at the root under .git doesn\'t work when the repository has a core.worktree configuration setting.',NULL,683,8,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvX///98='),(75,4,'2010-06-16 23:01:32','P',1,'you document some of the methods others are not documented',NULL,683,9,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALvX///9k='),(151,4,'2010-06-16 23:01:32','P',1,'parameter is not documented',NULL,683,9,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALvn////4='),(50,4,'2010-06-16 23:01:32','P',1,'javadoc missing here',NULL,683,9,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreRule.java','AAALvn////8='),(71,4,'2010-06-16 23:01:32','P',1,'parameter not documented',NULL,683,9,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvn////0='),(212,4,'2010-06-16 23:01:32','P',1,'parameter not documented',NULL,683,9,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvn////o='),(200,4,'2010-06-16 23:01:32','P',1,'parameter not documented',NULL,683,9,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvn////s='),(86,4,'2010-06-16 23:01:32','P',1,'parameter and exception not documented',NULL,683,9,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/SimpleIgnoreCache.java','AAALvn////w='),(107,32,'2010-06-23 20:53:00','d',1,'This is probably not necessary given the use of FileTreeIterator to check for the existence of gitignore files. However are parsed only when they are needed, so there could be a large gap between node initialization and parsing where a .gitignore file could be deleted. This needs to be addressed either by parsing the nodes as they are initialized or by passing timestamps to determine when a re-parse is necessary.',NULL,683,12,'org.eclipse.jgit/src/org/eclipse/jgit/ignore/IgnoreNode.java','AAALwX///90='),(37,6,'2010-06-30 13:56:04','P',1,'We should stick to the pattern to use Import-Package here:\norg.eclipse.jgit.ignore;version=\"[0.9.0,0.10.0)\",',NULL,683,14,'org.eclipse.jgit.test/META-INF/MANIFEST.MF','AAALwX///uI='),(80,6,'2010-06-30 13:56:04','P',1,'To really create a Repo you should call repo.create(). Otherwise the repository does not really exist and I assume that this will sooner or later lead to problems.\n\nI would to use LocalDiskRepositoryTestCase as a base class and then copy the test files to this new location. This ensures that each tearDown method does remove the repository.',NULL,683,14,'org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreCacheTest.java','AAALwX///t0='),(14,6,'2010-06-30 13:56:04','P',1,'The version umber should be added.',NULL,683,14,'org.eclipse.jgit/META-INF/MANIFEST.MF','AAALwX///uE='),(1,6,'2010-07-07 13:32:38','d',0,'There are now windows line breaks. Please replace them by UNIX line breaks.',NULL,683,16,'org.eclipse.jgit.test/META-INF/MANIFEST.MF','AAALwX///FY='),(1,6,'2010-07-07 13:32:56','d',0,'There are now windows line breaks. Please replace them by UNIX line breaks.',NULL,683,16,'org.eclipse.jgit/META-INF/MANIFEST.MF','AAALwX///FU='),(2,4,'2010-07-12 21:19:28','P',1,'why all these whitespace differences ?',NULL,683,17,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java','AAALwX//+0w='),(2,4,'2010-07-12 21:19:28','P',1,'why all these whitespace differences ?',NULL,683,17,'org.eclipse.jgit/src/org/eclipse/jgit/treewalk/AbstractTreeIterator.java','AAALwX//+00='),(2,4,'2010-07-12 21:19:28','P',1,'why all these whitespace differences ?',NULL,683,17,'org.eclipse.jgit/src/org/eclipse/jgit/treewalk/FileTreeIterator.java','AAALwX//+0s='),(71,63,'2010-05-17 10:13:51','d',1,'Changed to throw an ITE back up like CompareWithHeadAction.','AAALun///gE=',686,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CompareWithIndexAction.java','AAALun///fw='),(71,6,'2010-05-17 09:12:27','P',1,'Now the exception isn\'t logged at all',NULL,686,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CompareWithIndexAction.java','AAALun///gE='),(117,63,'2010-05-12 12:16:19','P',1,'I would suggest capitalizing the \'f\' in \'first\'.',NULL,688,1,'org.eclipse.egit.ui/plugin.properties','AAALun///pI='),(10,46,'2010-05-17 15:44:44','P',1,'whitespace (2 more below)',NULL,702,2,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/test/ContextMenuHelper.java','AAALun///ek='),(32,46,'2010-05-17 15:44:44','P',1,'whitespace',NULL,702,2,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/wizards/share/SharingWizard.java','AAALun///eo='),(25,46,'2010-05-17 15:44:44','P',1,'whitespace',NULL,702,2,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/wizards/share/SharingWizard.java','AAALun///es='),(45,46,'2010-05-17 15:44:44','P',1,'whitespace',NULL,702,2,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/wizards/share/SharingWizardTest.java','AAALun///eg='),(1568,46,'2010-05-17 16:21:49','P',1,'Thanks. See next patch set.','AAALun///fA=',714,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALun///eY='),(1568,63,'2010-05-17 15:40:10','P',1,'The platform has an API for this. Just call \'page.findViewReference(VIEW_ID)\' instead.',NULL,714,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALun///fA='),(1,63,'2010-05-17 15:41:50','d',1,'Please add a license header.',NULL,715,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchConfiguredRemoteAction.java','AAALun///e4='),(1,4,'2010-05-19 09:44:35','P',1,'missing license header',NULL,715,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchConfiguredRemoteAction.java','AAALun///Zk='),(72,4,'2010-05-19 09:44:35','P',1,'style: could be formatted on less lines',NULL,715,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchConfiguredRemoteAction.java','AAALun///ZU='),(65,4,'2010-05-19 09:44:35','P',1,'style: could be formatted on less lines',NULL,715,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchConfiguredRemoteAction.java','AAALun///ZY='),(1,63,'2010-05-17 15:41:54','d',1,'Please add a license header.',NULL,715,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushConfiguredRemoteAction.java','AAALun///e0='),(82,4,'2010-05-19 09:44:35','P',1,'style: strange formatting, could use less lines',NULL,715,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushConfiguredRemoteAction.java','AAALun///Zc='),(1,4,'2010-05-19 09:44:35','P',1,'missing license header',NULL,715,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushConfiguredRemoteAction.java','AAALun///Zg='),(1,8,'2010-05-20 20:34:59','P',1,'Delete this file',NULL,716,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/BranchSelectionDialog.java.orig','AAALun///LA='),(64,8,'2010-05-20 20:34:59','P',1,'I would say return 31 * root.hashCode() + resource.hashCode()\nand add an equals method.',NULL,716,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/ResourceNode.java','AAALun///K8='),(23,8,'2010-05-20 20:34:59','P',1,'Why shouldn\'t this text be i18n;able?',NULL,716,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagedNode.java','AAALun///LQ='),(936,8,'2010-05-20 20:34:59','P',1,'i18N-ab le string. Do not silence warning.',NULL,716,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingView.java','AAALun///LI='),(898,8,'2010-05-20 20:34:59','P',1,'Either add the NLS stuff or leave out the NON-NLS stuff so others people can find these strings. Having a warning is meaningful.',NULL,716,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingView.java','AAALun///LM='),(54,8,'2010-05-20 20:34:59','P',1,'probably not terribly important, but I guess you meant\n\n return 31 * getClass().getName().hashCode() + repository.hashCode(\n\nBut worse is that you don\'t have an equals. Defining hashCode\nwithout equals make little sense to me.',NULL,716,3,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StatusNode.java','AAALun///LE='),(45,5,'2010-05-19 08:13:45','P',1,'Done','AAALun///XE=',721,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/WrongRepoStateException.java','AAALun///Vc='),(45,4,'2010-05-18 22:44:34','P',1,'I would prefer WrongRepositoryStateException for the name of this public exception class',NULL,721,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/WrongRepoStateException.java','AAALun///XE='),(522,5,'2010-05-19 08:13:45','P',1,'Done','AAALun///W8=',721,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java','AAALun///VU='),(519,5,'2010-05-19 08:13:45','P',1,'Done','AAALun///XA=',721,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java','AAALun///VY='),(522,4,'2010-05-18 22:44:34','P',1,'see above',NULL,721,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java','AAALun///W8='),(519,4,'2010-05-18 22:44:34','P',1,'s/of a file/of the file/\n\nor is there any other file ?',NULL,721,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java','AAALun///XA='),(148,5,'2010-05-20 14:26:02','P',1,'Done','AAALun///P0=',721,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAALun///OY='),(148,1,'2010-05-20 01:26:32','P',1,'Please add an assert to verify that the parent order is as-expected.  In this case that is side, master because you have merged the master branch into the current branch, which is side.',NULL,721,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java','AAALun///P0='),(118,5,'2010-05-20 14:26:02','P',0,'convinced. I\'ll keep the resolve call','AAALun///QM=',721,2,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///N0='),(153,5,'2010-05-20 14:26:02','P',1,'Done','AAALun///QI=',721,2,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///OA='),(135,5,'2010-05-20 14:26:02','P',1,'Done','AAALun///QA=',721,2,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///OM='),(123,5,'2010-05-20 14:26:02','P',1,'Done','AAALun///QU=',721,2,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///OQ='),(134,5,'2010-05-20 14:26:02','P',1,'Done','AAALun///QQ=',721,2,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///OU='),(135,1,'2010-05-20 01:26:32','P',1,'See my note above on the old version.  We need to add headId to the *front* of parents.  The current branch goes first in the parent list, then the values of MERGE_HEAD, in order.  This is necessary to preserve the behavior of --first-parent logic during revision traversal.',NULL,721,2,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///QA='),(153,1,'2010-05-20 01:26:32','P',1,'parents should not be null.  So why this test?',NULL,721,2,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///QI='),(118,1,'2010-05-20 01:26:32','P',0,'We\'re losing the safety that ensured HEAD was actually a commit.  Its been seen in real-world cases that users have managed to do something stupid and set HEAD to a tag or a tree.  Blindly assuming HEAD is a commit can only lead to data corruption when things go bad.\n\nEither keep the repo.resolve call, or do some sort of object lookup on the ObjectId to verify its actually a commit.  E.g.:\n\n  if (headId != null) {\n    ObjectLoader ldr = repo.openObject(headId);\n    if (ldr == null)\n      throw new MissingObjectException(headId, Constants.OBJ_COMMIT);\n    if (ldr.getType() != Constants.OBJ_COMMIT)\n      throw new IncorrectObjectTypeException(headId, Constants.OBJ_COMMIT);\n    parents.add(0, headId);\n  }',NULL,721,2,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///QM='),(134,1,'2010-05-20 01:26:32','P',1,'Style-nit: Spaces around operator.',NULL,721,2,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///QQ='),(123,1,'2010-05-20 01:26:32','P',1,'Please rebase onto master and translate the new message.',NULL,721,2,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///QU='),(1378,5,'2010-05-20 14:26:02','P',1,'I was not sure whether we could have an empty MERGE_HEAD file. And I wanted to return and empty list in this case and null when this file doesn\'t exist (e.g. because you are currently not merging at all)','AAALun///P4=',721,2,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALun///N4='),(1354,5,'2010-05-20 14:26:02','P',1,'ahh, very useful method. Didn\'t know about it and will use it from now on.','AAALun///P8=',721,2,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALun///N8='),(1378,1,'2010-05-20 16:13:20','P',1,'An empty MERGE_HEAD shouldn\'t happen.  If the file exists but has no content, its a bug in the program that produced it.  We probably want to abort under that condition and refuse to operate further, claiming a type of repository corruption.  That is better signaled by an exception than by a return code.','AAALun///N4=',721,2,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALun///NE='),(1378,1,'2010-05-20 01:26:32','P',1,'I think I mentioned in CommitCommand that we should make sure parents is never null.  So perhaps here we return a new empty list instead of null when the file isn\'t present?',NULL,721,2,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALun///P4='),(1354,1,'2010-05-20 01:26:32','P',1,'I would prefer instead:\n\n  File msg = new File(gitDir, Constants.MERGE_MSG);\n  try {\n    return new String(IO.readFully(msg));\n  } catch (FileNotFoundException notFound) {\n    return null;\n  }\n\nIt ensures the file will fit in memory, ensures we actually read all of it and didn\'t abort in the middle due to a short read, and ensures the file descriptor is closed at the end.  And, like the FileReader case you used, it uses the platform default encoding.',NULL,721,2,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALun///P8='),(30,1,'2010-05-20 16:50:33','P',1,'Trailing whitespace',NULL,721,3,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALun///M8='),(170,8,'2010-05-20 17:52:47','P',1,'Is it ok if delete() fail?. delete doesn\'t throw exceptions',NULL,721,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///L0='),(85,8,'2010-05-20 17:52:47','P',1,'Use javadoc for commenting classes/fields/methods',NULL,721,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///L8='),(170,1,'2010-05-20 17:56:15','P',1,'Robin, see my comment above on line 165.  Yes, its OK if the delete fails.  But only after the ref has been updated.','AAALun///L0=',721,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///Ls='),(161,1,'2010-05-20 16:50:33','P',1,'I would defer this cleanup until after the reference is updated.  If the update fails, the commit will be discarded.  Taking out the MERGE_HEAD file means we can\'t retry.',NULL,721,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///M0='),(155,1,'2010-05-20 16:50:33','P',1,'This test is actually unnecessary.  If parents is empty, we\'ll alloc an empty array, pass it down, and Commit will clone the empty array.  We can leave it in, or drop it.  I think the code reads cleaner without the test, and its really not much slower in the (really quite rare) initial commit case.',NULL,721,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///M4='),(165,1,'2010-05-20 16:50:33','P',1,'I wouldn\'t bother with the exists test.  These files are highly likely to exist, because that\'s how we determined the state earlier in this method... by testing for their existence.  Just delete them.  If the delete fails because its already gone, it returns false, and is therefore harmless.',NULL,721,3,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///Mw='),(1361,1,'2010-05-20 17:56:15','P',1,'The MERGE_MSG file isn\'t really that important.  If MERGE_MSG wasn\'t written out, it just means the user needs to supply a commit message to us at commit time.  I wouldn\'t call that a fatal condition.  Its fine to ignore it when its not found.','AAALun///MA=',721,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALun///Lo='),(1361,8,'2010-05-20 17:52:47','P',1,'Is there a real reason for this to happen, other than someone\nperforming a merge in another process?',NULL,721,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALun///MA='),(1375,1,'2010-05-20 16:50:33','P',1,'See my note on ps2 again about an empty MERGE_HEAD file being a form of corruption.  But you may also be able to shorten the code up a bit here:\n\n  File mergeHeadFile = new File(gitDir, Constants.MERGE_HEAD);\n  byte[] raw;\n  try {\n    raw = IO.readFully(mergeHeadFile);\n  } catch (FileNotFoundException notFound) {\n    return new LinkedList<ObjectId>();\n  }\n\n  if (raw.length == 0)\n    throw new IOException(\"MERGE_HEAD file empty: \" + mergeHeadFile);\n\n  LinkedList<ObjectId> heads = new LinkedList<ObjectId>();\n  for (int p = 0; p < raw.length; ) {\n    heads.add(ObjectId.fromString(raw, p));\n    p = RawParseUtils.nextLF(raw, p + Constants.OBJECT_ID_STRING_LENGTH);\n  }\n  return heads;\n\nHmm, its not that much shorter (~5 lines?).  But the behavior matches C git better.  IIRC C git reads the first 40 characters from the line and ignores the rest of it.  Which is exactly what are doing above by using nextLF.',NULL,721,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALun///NA='),(211,1,'2010-05-20 16:54:41','P',1,'Good point about the Ref class being a reusable pair of String and ObjectId.  I think you could use ObjectIdRef.Loose here rather than Source and get everything we need.  It might actually be preferred, because you\'ll want a short-form for branch names (\"master\" instead of \"refs/heads/master\") and we should probably teach Ref how to create those, because its a stateless function and having it on Repository is somewhat useless.\n\nI just wasn\'t thinking enough when I wrote my comments yesterday and slapped together that Source class.  Sorry.','AAALun///PA=',723,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///Mo='),(211,5,'2010-05-20 07:30:38','P',1,'But Shawn, I always thought a Ref is a combination of name and objectID. Why should we introduce something else like the Source class?\n\nI agree of course that we need to add ways to AnyObjectID.','AAALun///PQ=',723,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///PA='),(160,5,'2010-05-20 07:30:38','P',1,'added a UnresolvedConflictsException exposing also conflicting pathes','AAALun///Pk=',723,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///PE='),(171,1,'2010-05-20 01:39:35','P',1,'Please also set the OldObjectId on the RefUpdate.  We read it earlier.  We shouldn\'t continue with the update if the branch was modified by a concurrent process.',NULL,723,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///Pg='),(171,5,'2010-05-20 07:30:38','P',1,'Done','AAALun///Pg=',723,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///PI='),(160,1,'2010-05-20 01:39:35','P',1,'This isn\'t really an internal exception.  Its easy for a user to cause, just modify (and don\'t commit) a file that the branch you are fast-forwarding to has also modified.  This happens so often that users want to know the complete list of offending files, so they can figure out what to do next.\n\nThis is an exception (or MergeResult?) that we need to export as part of the public API so that applications can alert the user that their working directory contains uncommitted changes which conflict with the merge they are trying to do.',NULL,723,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///Pk='),(110,5,'2010-05-20 07:30:38','P',1,'Done','AAALun///Po=',723,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///PM='),(110,1,'2010-05-20 01:39:35','P',1,'FWIW, getLeaf() isn\'t necessary.  getObjectId() works on symbolic references by traversing to the leaf to get the value.',NULL,723,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///Po='),(211,1,'2010-05-20 01:46:26','P',1,'That\'s true, we can break API compatibility.  But I would prefer to have some sane notion up front.  Too much of JGit\'s own internal library API is just sort of slapped together, and the same goes true for a lot of the C command line switches and so forth.  Better if we spend a few minutes to try and learn from both experiences.  :-)','AAALun///PY=',723,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///PQ='),(211,1,'2010-05-20 01:39:35','P',1,'I realize this is only a basic start.  But since this is public API I\'d like to think about what the final API will look like a bit.\n\nMerges can accept any SHA-1.  So technically we need to take AnyObjectId here as an input.  Having a Ref can be nicer, because we might be able to format a better message.  Further, `git pull` takes advantage of the URIish to produce an even more useful message.\n\nMerges also can accept more than one SHA-1 if you consider the octopus strategy.  So maybe we want this part of the API to be:\n\n  public MergeCommand include(AnyObjectId commit) {\n    return include(commit, commit.abbrev());\n  }\n\n  public MergeCommand include(Ref ref) {\n    return include(ref.getObjectId(), ref.getName());\n  }\n\n  public MergeCommand include(AnyObjectId commit, String name) {\n    sources.add(new Source(commit, name));\n    return this;\n  }\n\n  private static class Source {\n    final ObjectId commit;\n    final String name;\n  }\n\nThen when we format the merge message we can try to take advantage of that additional name member to describe the source of the merge.  Further, callers can include more than one commit in a single merge operation.',NULL,723,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///Ps='),(211,2,'2010-05-20 01:44:17','P',1,'Well, this is \"API\" per se for 0.8.0 but until we release 1.0.0 we aren\'t giving people any guarantees for backwards compatibility imho.','AAALun///Ps=',723,1,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///PY='),(66,5,'2010-05-21 14:41:09','P',1,'it\'s a miracle to me how this parens came in. So useless that I cannot believe I typed it ...','AAALun///Mc=',723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutConflictException.java','AAALun///J8='),(70,5,'2010-05-21 14:41:09','P',1,'Done','AAALun///MY=',723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutConflictException.java','AAALun///KA='),(57,5,'2010-05-21 14:41:09','P',1,'Done','AAALun///Mg=',723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutConflictException.java','AAALun///KI='),(66,1,'2010-05-20 17:37:21','P',1,'Style-nit: Unnecessary parens.  If there\'s ever a place you don\'t need parens, its right here in an assignment of one variable to another.  :-)',NULL,723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutConflictException.java','AAALun///Mc='),(57,1,'2010-05-20 17:37:21','P',1,'Style-nit: Spaces around operators (applies also to a number of spots below).',NULL,723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutConflictException.java','AAALun///Mg='),(70,1,'2010-05-20 17:37:21','P',1,'s/Pathes/Paths/',NULL,723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutConflictException.java','AAALun///MY='),(161,5,'2010-05-21 14:41:09','P',1,'damned eclipse auto formatter. I\'ll revert this','AAALun///Mk=',723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///J0='),(161,1,'2010-05-20 17:37:21','P',1,'Unrelated reformatting in this file?  Looks like you can revert it from this change.',NULL,723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java','AAALun///Mk='),(117,5,'2010-05-21 14:41:09','P',1,'Maybe this was a misunderstanding by Stefan and me. \nWhen reading http://www.kernel.org/pub/software/scm/git/docs/git-merge.html#_pre_merge_checks we thought that FAST_FORWARD and ALREADY_UP_TO_DATE are checks which are done before we contact the merge strategy. This loop was never intended to be a \"big loop doing all the merges and maybe combining merge operations\" - we just wanted to do these two pre-merge checks. \n\nBut after reading your comment and experimenting we see that these pre-merge checks are not done before the merge strategy but every strategy triggers them explicitly, right?\n\nFor now we\'ll remove the loop and keep the fast-forward, already-up-to-date checks. We\'ll make sure that only one commit is specifiied.','AAALun///MI=',723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///JM='),(102,5,'2010-05-21 14:41:09','P',1,'added a InvalidMergeHeadException','AAALun///MM=',723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///JQ='),(83,5,'2010-05-21 14:41:09','P',1,'I\'ll use List<Ref> now','AAALun///MU=',723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///JU='),(246,5,'2010-05-21 14:41:09','P',1,'Done','AAALun///MQ=',723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///Jw='),(226,5,'2010-05-21 14:41:09','P',1,'oops, I missed to merge with Stefans fix for annotated tags (calling getPeeledObjectID()). I\'ll add that again.',NULL,723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///JY='),(117,1,'2010-05-20 17:37:21','P',1,'This is really undefined when there is more than one commit.\n\nInstead you should look at the strategy, and then enforce some sanity on the commits member.  E.g. add a member to MergeStrategy to help us decide if the number of commits is reasonable.  Then the already-up-to-date and fast-forward-only strategies only need to accept 1 commit, and reject functioning when more than 1 commit is given.\n\nI do see that you are trying to collapse multiple commits that are reachable all together in this loop.  But that\'s probably just a pre-processing step that we can do at the beginning of the function, no matter what strategy was configured.  Even in an octopus merge, it doesn\'t make sense to create an 8-way merge if it can really be a 2-way because the other 6 commits are already reachable.\n\nGerrit Code Review has some logic to do this in [1].  Ignore the CAN_MERGE stuff, that\'s there only to support the code review workflow and ensure a commit was approved.  The bulk of the sorting logic is about computing the commits that will be merged, and removing them from incoming (what the caller asked us to merge) if they are already reachable.\n\n[1] https://android.git.kernel.org/?p=tools/gerrit.git;a=blob;f=gerrit-server/src/main/java/com/google/gerrit/server/git/MergeSorter.java;hb=HEAD\n\nYou know what, maybe for right now just enforce that commits.size() == 1 at the start of the method (and maybe also in include, assert that its empty), and simplify the code around that assertion.  commits.size() > 1 will only be useful once we have all other aspects of the merge code working... and we can come back and revisit how to sort the heads and determine up-to-date in the octopus case.',NULL,723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///MI='),(102,1,'2010-05-20 17:37:21','P',1,'We probably should also abort if commits is empty.  You need at least one other thing to merge with besides head.',NULL,723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///MM='),(246,1,'2010-05-20 17:37:21','P',1,'This needs to be commit.copy().  AnyObjectId can be a MutableObjectId, which can change after-the-fact.  copy() returns you an ObjectId which cannot be mutated.  If the input was already an immutable ObjectId, copy() just returns the same object.',NULL,723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///MQ='),(83,1,'2010-05-20 17:37:21','P',1,'The problem with a HashMap is it doesn\'t preserve the order the caller passed the commits to us in.  We should maintain that order, because its the order we\'ll attempt to do the octopus merge in, and the order we write the parents out in the commit as.  If you keep using a Map<String,ObjectId> here you should use a LinkedHashMap to ensure the insertion order is preserved.  Or, switch to a List<Ref>.',NULL,723,4,'org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java','AAALun///MU='),(147,4,'2010-05-22 18:18:49','P',1,'You are leaking image resources here, I think you should use a ResourceManager to dispose the images when the dialog is closed. For an example have a look at class GitDecoratorPreferencePage',NULL,736,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///Ic='),(147,49,'2010-05-22 18:56:31','P',1,'Can I use ImageRegistry instead of ResourceManager ?\n\nIt seems that ImageRegistry is easier to use here.','AAALun///Ic=',736,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CreateTagDialog.java','AAALun///IU='),(67,8,'2010-05-24 22:29:00','P',1,'The seconds argument is not available in .3.4',NULL,737,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/FilteredCheckboxTree.java','AAALun///Fk='),(43,8,'2010-05-24 22:29:00','P',1,'This and the other constructors don\' work with 3.4 since the FilteredTree class doesn\'t take FotmToolkit as a constructor argument',NULL,737,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/FilteredCheckboxTree.java','AAALun///Fo='),(136,8,'2010-05-24 22:29:00','P',1,'Unknown methods in Eclipse 3.4. Not fatal though',NULL,737,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/FilteredCheckboxTree.java','AAALun///Fw='),(12,4,'2010-05-25 14:46:40','P',1,'trailing whitespace',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/BranchesNode.java','AAALun///Eo='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/BranchesNode.java','AAALun///Es='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/ErrorNode.java','AAALun///Ek='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/FetchNode.java','AAALun///Eg='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/FileNode.java','AAALun///Ec='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/FolderNode.java','AAALun///EY='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/LocalBranchesNode.java','AAALun///EU='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/PushNode.java','AAALun///EQ='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RefNode.java','AAALun///EM='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RemoteBranchesNode.java','AAALun///EI='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RemoteNode.java','AAALun///EE='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RemotesNode.java','AAALun///EA='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoryNode.java','AAALun///D8='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoryTreeNodeType.java','AAALun///D4='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/SymbolicRefNode.java','AAALun///D0='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/SymbolicRefsNode.java','AAALun///Dw='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/TagNode.java','AAALun///Ds='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/TagsNode.java','AAALun///Do='),(1,4,'2010-05-25 14:46:40','P',1,'license header missing',NULL,743,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/WorkingDirNode.java','AAALun///Dk='),(28,63,'2010-05-26 12:05:41','P',1,'There is actually no need to mention SubProgressMonitor. I merely brought SubMonitor up on the bug for the benefit of others that are not familiar with that class. :)\n\nJust state what the monitor is for and whether null is allowed or not and such and keep the @param description \"narrow\" by only talking about IProgressMonitor, the interface.',NULL,750,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/IEGitOperation.java','AAALun///B0='),(28,4,'2010-05-26 08:40:36','d',1,'you still do not specify if passing null is valid when calling this method',NULL,750,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/IEGitOperation.java','AAALun///B4='),(28,44,'2010-05-26 12:57:24','P',1,'Done','AAALun///B0=',750,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/IEGitOperation.java','AAALun///BY='),(41,2,'2010-05-26 13:52:40','P',1,'We may not need to include this one as this is heavily targeted towards Eclipse.org developers and not EGit users specifically. For now, I think it\'s fine.',NULL,751,1,'org.eclipse.egit.doc/build-help.xml','AAALun///A4='),(370,11,'2010-06-08 08:26:36','P',1,'This test violates the rule \"exactly one test to fail for any given bug\". Would it be better to split it up into 5 individual tests?',NULL,754,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java','AAALu3///so='),(54,4,'2010-05-28 07:15:31','P',1,'trailing whitespace',NULL,756,1,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/wizards/share/SharingWizardTest.java','AAALun//+/c='),(2,4,'2010-05-27 16:25:57','P',1,'you should also copy the copyrights from the original authors, you are just moving the code they wrote ...',NULL,758,3,'org.eclipse.egit.core/src/org/eclipse/egit/core/RepositoryCache.java','AAALun//+/k='),(38,1,'2010-05-28 23:08:42','P',1,'I chose not to include this in our IP log since we aren\'t actually using it yet.  We\'re still waiting on the IP team to approve the use before we start to code against it.',NULL,773,1,'.eclipse_iplog','AAALun//+8c='),(26,1,'2010-05-28 23:08:42','P',1,'This delta was already applied by me earlier today.  Update your working copy.',NULL,773,1,'.eclipse_iplog','AAALun//+8g='),(46,1,'2010-05-28 23:56:58','P',1,'Don\'t use > to redirect, use -o option to write the file.\n\nAlso, the IP team wants to see the actual project version number in the log even if its not yet tagged.  So instead we want to run:\n\n  eclipse-iplog --version=0.8.0 -o jgit-0.8.0.xml HEAD',NULL,773,2,'org.eclipse.jgit.iplog/README','AAALun//+8A='),(41,1,'2010-05-28 23:56:58','P',1,'I\'m pretty sure we now allow whitespace in front of first column.  But yea, no headers, no blank lines.',NULL,773,2,'org.eclipse.jgit.iplog/README','AAALun//+8E='),(26,1,'2010-05-28 23:56:58','P',1,'You have to `git commit` this first if there are any updates.  The eclipse-iplog program relies on the committed version of this file, not the version that is in your working directory.',NULL,773,2,'org.eclipse.jgit.iplog/README','AAALun//+8I='),(29,46,'2010-06-04 08:13:02','P',0,'Done','AAALu3///30=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/ConfigureRemoteWizard.java','AAALu3///2k='),(29,4,'2010-06-03 23:33:27','P',0,'missing javadoc',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/ConfigureRemoteWizard.java','AAALu3///30='),(27,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///64=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/CloneCommand.java','AAALu3///2Q='),(20,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///3s=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/CloneCommand.java','AAALu3///2U='),(20,4,'2010-06-03 23:33:27','P',1,'aren\'t add and clone different operations ?',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/CloneCommand.java','AAALu3///3s='),(27,4,'2010-06-03 23:33:27','P',1,'unnecessary blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/CloneCommand.java','AAALu3///64='),(29,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///60=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/ConfigureFetchCommand.java','AAALu3///2M='),(29,4,'2010-06-03 23:33:27','P',1,'unnecessary blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/ConfigureFetchCommand.java','AAALu3///60='),(29,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6w=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/ConfigurePushCommand.java','AAALu3///2E='),(22,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///3o=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/ConfigurePushCommand.java','AAALu3///2I='),(22,4,'2010-06-03 23:33:27','P',1,'wrong javadoc',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/ConfigurePushCommand.java','AAALu3///3o='),(29,4,'2010-06-03 23:33:27','P',1,'unnecessary blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/ConfigurePushCommand.java','AAALu3///6w='),(30,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6s=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/CopyPathCommand.java','AAALu3///2A='),(30,4,'2010-06-03 23:33:27','P',1,'unnecessary blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/CopyPathCommand.java','AAALu3///6s='),(56,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6g=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/CreateBranchCommand.java','AAALu3///10='),(37,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6k=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/CreateBranchCommand.java','AAALu3///14='),(30,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6o=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/CreateBranchCommand.java','AAALu3///18='),(56,4,'2010-06-03 23:33:27','P',1,'unnecessary blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/CreateBranchCommand.java','AAALu3///6g='),(37,4,'2010-06-03 23:33:27','P',1,'unnecessary blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/CreateBranchCommand.java','AAALu3///6k='),(30,4,'2010-06-03 23:33:27','P',1,'wrong javadoc',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/CreateBranchCommand.java','AAALu3///6o='),(68,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6Q=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/DeleteBranchCommand.java','AAALu3///1k='),(54,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6U=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/DeleteBranchCommand.java','AAALu3///1o='),(50,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6Y=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/DeleteBranchCommand.java','AAALu3///1s='),(30,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6c=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/DeleteBranchCommand.java','AAALu3///1w='),(30,4,'2010-06-03 23:33:27','P',1,'wrong javadoc',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/DeleteBranchCommand.java','AAALu3///6c='),(68,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/DeleteBranchCommand.java','AAALu3///6Q='),(54,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/DeleteBranchCommand.java','AAALu3///6U='),(50,4,'2010-06-03 23:33:27','P',1,'unnecessary blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/DeleteBranchCommand.java','AAALu3///6Y='),(27,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6I=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/DeletePushCommand.java','AAALu3///1c='),(23,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6M=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/DeletePushCommand.java','AAALu3///1g='),(27,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/DeletePushCommand.java','AAALu3///6I='),(23,4,'2010-06-03 23:33:27','P',1,'wrong javadoc',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/DeletePushCommand.java','AAALu3///6M='),(43,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///58=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/FetchCommand.java','AAALu3///1Q='),(41,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6A=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/FetchCommand.java','AAALu3///1U='),(30,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///6E=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/FetchCommand.java','AAALu3///1Y='),(43,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/FetchCommand.java','AAALu3///58='),(41,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/FetchCommand.java','AAALu3///6A='),(30,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/FetchCommand.java','AAALu3///6E='),(27,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///54=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/FetchConfiguredRemoteCommand.java','AAALu3///1M='),(27,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/FetchConfiguredRemoteCommand.java','AAALu3///54='),(62,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5w=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/ImportProjectsCommand.java','AAALu3///1E='),(28,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///50=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/ImportProjectsCommand.java','AAALu3///1I='),(28,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/ImportProjectsCommand.java','AAALu3///50='),(62,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/ImportProjectsCommand.java','AAALu3///5w='),(37,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5k=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenCommand.java','AAALu3///04='),(26,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5o=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenCommand.java','AAALu3///08='),(21,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5s=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenCommand.java','AAALu3///1A='),(37,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenCommand.java','AAALu3///5k='),(26,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenCommand.java','AAALu3///5o='),(21,4,'2010-06-03 23:33:27','P',1,'wrong javadoc',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenCommand.java','AAALu3///5s='),(32,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5g=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenInTextEditorCommand.java','AAALu3///00='),(32,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenInTextEditorCommand.java','AAALu3///5g='),(50,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5U=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenPropertiesCommand.java','AAALu3///0o='),(28,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5Y=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenPropertiesCommand.java','AAALu3///0s='),(26,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5c=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenPropertiesCommand.java','AAALu3///0w='),(26,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenPropertiesCommand.java','AAALu3///5c='),(50,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenPropertiesCommand.java','AAALu3///5U='),(28,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenPropertiesCommand.java','AAALu3///5Y='),(33,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5M=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PasteCommand.java','AAALu3///0c='),(31,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5Q=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PasteCommand.java','AAALu3///0g='),(26,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///3k=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PasteCommand.java','AAALu3///0k='),(88,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5I=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PasteCommand.java','AAALu3///0Y='),(26,4,'2010-06-03 23:33:27','P',1,'could be more specific',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PasteCommand.java','AAALu3///3k='),(88,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PasteCommand.java','AAALu3///5I='),(33,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PasteCommand.java','AAALu3///5M='),(31,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PasteCommand.java','AAALu3///5Q='),(40,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5E=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PushCommand.java','AAALu3///0U='),(40,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PushCommand.java','AAALu3///5E='),(46,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///48=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PushConfiguredRemoteCommand.java','AAALu3///0M='),(24,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///5A=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PushConfiguredRemoteCommand.java','AAALu3///0Q='),(46,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PushConfiguredRemoteCommand.java','AAALu3///48='),(24,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/PushConfiguredRemoteCommand.java','AAALu3///5A='),(40,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///4w=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RefreshCommand.java','AAALu3///0A='),(23,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///40=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RefreshCommand.java','AAALu3///0E='),(18,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///44=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RefreshCommand.java','AAALu3///0I='),(23,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RefreshCommand.java','AAALu3///40='),(18,4,'2010-06-03 23:33:27','P',1,'wrong javadoc ?',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RefreshCommand.java','AAALu3///44='),(40,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RefreshCommand.java','AAALu3///4w='),(86,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///4c='),(59,4,'2010-06-03 23:33:27','P',1,'why do we need a line break here ?',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///4g='),(55,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///4k='),(146,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///4M='),(46,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///4o='),(123,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///4Q='),(44,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///4s='),(116,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///4U='),(97,4,'2010-06-03 23:33:27','P',1,'why this dead commented out code ?',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///4Y='),(55,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///4k=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///z0='),(46,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///4o=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///z4='),(44,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///4s=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///z8='),(146,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///4M=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///zc='),(123,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///4Q=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///zg='),(116,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///4U=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///zk='),(97,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///4Y=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///zo='),(86,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///4c=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///zs='),(59,46,'2010-06-04 08:13:02','P',1,'Because the code formatter says so.','AAALu3///4g=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveCommand.java','AAALu3///zw='),(64,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveRemoteCommand.java','AAALu3///38='),(33,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveRemoteCommand.java','AAALu3///4A='),(31,4,'2010-06-03 23:33:27','P',1,'blank line',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveRemoteCommand.java','AAALu3///4E='),(26,4,'2010-06-03 23:33:27','P',1,'wrong javadoc',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveRemoteCommand.java','AAALu3///4I='),(64,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///38=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveRemoteCommand.java','AAALu3///zM='),(33,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///4A=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveRemoteCommand.java','AAALu3///zQ='),(31,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///4E=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveRemoteCommand.java','AAALu3///zU='),(26,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///4I=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RemoveRemoteCommand.java','AAALu3///zY='),(41,4,'2010-06-03 23:33:27','P',1,'anything missing here ?',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RepositoriesViewCommandHandler.java','AAALu3///34='),(41,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///34=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/RepositoriesViewCommandHandler.java','AAALu3///zE='),(22,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///3w=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/PropertyTester.java','AAALu3///2g='),(22,4,'2010-06-03 23:33:27','P',1,'this says nothing',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/PropertyTester.java','AAALu3///3w='),(1,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///7A=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoriesViewSorter.java','AAALu3///2c='),(6,46,'2010-06-04 08:13:02','P',1,'Done','AAALu3///68=',778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoriesViewSorter.java','AAALu3///2Y='),(6,4,'2010-06-03 23:33:27','P',1,'we don\'t use @author tags\n\nmissing javadoc',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoriesViewSorter.java','AAALu3///68='),(1,4,'2010-06-03 23:33:27','P',1,'missing license header',NULL,778,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoriesViewSorter.java','AAALu3///7A='),(96,4,'2010-06-17 08:13:11','d',1,'style nit: no braces around single line',NULL,778,10,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/test/TestUtil.java','AAALv3////E='),(44,4,'2010-06-17 08:12:00','d',1,'trailing whitespace',NULL,778,10,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/test/TestUtil.java','AAALv3////I='),(76,4,'2010-06-17 08:14:00','d',1,'style nit: no braces around single line',NULL,778,10,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/view/repositories/GitRepositoriesViewTest.java','AAALv3////A='),(135,4,'2010-06-17 08:16:26','d',1,'typo : eelement',NULL,778,10,'org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/view/repositories/GitRepositoriesViewTest.java','AAALv3///+8='),(467,4,'2010-06-17 08:25:07','d',1,'style nit: no braces around single line',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALv3///+o='),(292,4,'2010-06-17 08:23:51','d',1,'style nit: extra blank line',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALv3///+s='),(269,4,'2010-06-17 08:23:19','d',1,'style nit: single lines without braces',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java','AAALv3///+w='),(74,4,'2010-06-17 08:25:37','d',1,'nit pick: no braces here',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewContentProvider.java','AAALv3///+k='),(49,4,'2010-06-17 08:26:02','d',1,'nit pick: no braces here',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java','AAALv3///+g='),(41,4,'2010-06-17 08:26:31','d',1,'extra blank lines (more below)',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/LinkHelper.java','AAALv3///+c='),(74,4,'2010-06-17 08:27:00','d',1,'no braces here (more below)',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/LinkHelper.java','AAALv3///+Y='),(88,4,'2010-06-17 08:37:15','d',1,'can we add exception handling here',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/PropertyTester.java','AAALv3///+M='),(69,4,'2010-06-17 08:36:56','d',1,'can we add exception handling here',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/PropertyTester.java','AAALv3///+Q='),(30,4,'2010-06-17 08:36:07','d',1,'nit pick: no braces',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/PropertyTester.java','AAALv3///+U='),(22,4,'2010-06-17 08:38:16','d',1,'missing javadoc',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoriesViewSorter.java','AAALv3///+I='),(281,4,'2010-06-17 08:20:09','d',1,'style nit: no braces around single line',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/RepositoryUtil.java','AAALv3///+0='),(273,4,'2010-06-17 08:19:53','d',1,'style nit: no braces around single line',NULL,778,10,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/RepositoryUtil.java','AAALv3///+4='),(122,46,'2010-06-02 06:06:45','P',1,'Done','AAALu3////o=',780,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitSelectRepositoryPage.java','AAALu3////E='),(122,2,'2010-06-01 18:02:43','P',1,'Can we log this?',NULL,780,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitSelectRepositoryPage.java','AAALu3////o='),(596,8,'2010-06-04 21:46:00','P',1,'1) Start sentences with capital letters.\n2) The second sentence is easier to read if it is a new paragraph ( LF <p> LF )',NULL,792,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReadTreeTest.java','AAALu3///xo='),(584,8,'2010-06-04 21:46:00','P',1,'Start sentences with capital letters',NULL,792,2,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReadTreeTest.java','AAALu3///xs='),(65,4,'2010-06-02 21:30:43','P',0,'0.8.1 ?',NULL,793,1,'org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml','AAALu3///80='),(72,4,'2010-06-02 21:30:43','P',0,'0.8.1 ?',NULL,793,1,'org.eclipse.jgit.packaging/org.eclipse.jgit.updatesite/pom.xml','AAALu3///8w='),(65,4,'2010-06-02 21:26:54','P',0,'0.8.1-SNAPSHOT ?',NULL,794,1,'org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml','AAALu3///9A='),(72,4,'2010-06-02 21:26:54','P',0,'0.8.1-SNAPSHOT ?',NULL,794,1,'org.eclipse.jgit.packaging/org.eclipse.jgit.updatesite/pom.xml','AAALu3///88='),(176,4,'2010-06-04 22:08:58','P',1,'style nit: we don\'t use curly braces around one line blocks',NULL,806,2,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RepositorySelectionPage.java','AAALu3///xg='),(70,8,'2010-06-08 19:57:23','P',0,'What does this have to do with the subject?',NULL,821,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALu3///sg='),(70,44,'2010-06-09 08:49:48','P',0,'1. refreshing projects is not required in this operation (no resources are changed).\n2. ProjectUtil.refreshProjects was deleted because it was replaced by new methods.','AAALu3///sg=',821,1,'org.eclipse.egit.core/src/org/eclipse/egit/core/op/TagOperation.java','AAALu3///sI='),(59,4,'2010-06-16 08:28:55','d',1,'typo:\ns/proect/project/',NULL,821,4,'org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/T0004_BranchOperationTest.java','AAALu3///bM='),(233,4,'2010-12-07 10:39:57','d',1,'bad idea',NULL,825,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java','AAAL03////8='),(1,4,'2010-06-10 23:46:36','P',1,'missing license header',NULL,825,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java','AAALu3///q4='),(1,5,'2010-07-05 23:52:18','P',1,'Done','AAALu3///q4=',825,1,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java','AAALwX///P4='),(206,1,'2010-06-15 15:07:58','P',1,'Sorry about the lagging replies.  I\'ve had more code review requests than I know what to do with, when you sum up all of the projects that I\'m working on.  Some stuff just slips through the cracks, and unfortunately you lost time for it.\n\nI think you are right, most compares don\'t require that 4th working tree iterator.  But a handful do.  Its probably better to keep that 4th working tree iterator running in parallel so that those compares are cheaper.  Unfortunately, we may wind up doing a stat() of each path to determine if its a file or a directory, and that stat is wasted if you later don\'t need to look at that particular path name.  However, I would rather the code be correct and easy to follow (it really is a 4-way join) than fast and obtuse.  We can always try to improve the working tree performance later.\n\nWorkDirCheckout predates the WorkingTreeIterator class, so it couldn\'t use it.  However, it does still have to hit the filesystem to figure out what is going, on and do that 4th join.\n\nAnyway, let me try to reply to [2] in context, rather than here.','AAALu3///hM=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALu3///gs='),(206,5,'2010-06-15 09:57:12','P',1,'Argh, ... quite lately I removed the workTreeIterator. My first version had the four iterators in the walk. Also your description on the algorithm in [1] contained the WorkingTreeIterator ... but this description was always walking over three tree\'s leaving out the head-commit. And I was always wondering why the WorkDirCheckout which had to solve the same problem didn\'t make use of the WorkingTreeIterator.\nI tried on my own with 4 trees and detected that in dozens of cases I don\'t need a working tree iterator (because I detect conflicts without looking at the workingdir). I thought: maybe iterating costly over the filesystem by default is not worth the effort and looking at files only when I need it is more performant.\nWhen I later got some problems during implementing I asked in you in [2] but couldn\'t wait for your answer before doing the proposal.\n\nAnyhow: I\'ll propose another patchset with the WorkDirIterator. I\'ll enhance the interface so that EGit can pass it\'s own Iterator.\n\n[1] http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg00220.html\n[2] http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg00377.html','AAALu3///kU=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALu3///hM='),(344,1,'2010-06-14 16:41:29','P',1,'Clever!',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALu3///j8='),(464,1,'2010-06-14 16:41:29','P',1,'tabs here, but spaces on next few lines, makes it harder to read.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALu3///kA='),(491,1,'2010-06-14 16:41:29','P',1,'tabs here, but spaces on next few lines, makes it harder to read.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALu3///kE='),(112,1,'2010-06-14 16:41:29','P',1,'You should document that the caller is expected to lock the DirCache before they pass it into you.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALu3///kI='),(252,1,'2010-06-14 16:41:29','P',1,'You probably should apply removed first.\n\nIf we have foo/bar turning into just foo, we need to safely delete the file bar, and safely delete the directory foo, before we can safely create the file called foo.\n\nAlso, we should try to apply these in order, starting from the bottom of the tree up.  That way you can avoid doing removeEmptyParents() until the last name scheduled for removal in that directory is removed.\n\nIts not all that hard.  Since removed is a List<String>, and its built during the name traversal, these are already sorted properly.  We just have to keep track of the directory prefix as we walk through the names:\n\n  String last = \"\";\n  for (String r : removed) {\n    if (!samePrefix(r, last))\n      removeEmptyParents(last);\n    ... delete r\n    last = r;\n  }\n  removeEmptyParents(last);\n\n  private boolean isSamePrefix(String a, String b) {\n    int as = a.lastIndexOf(\'/\');\n    int bs = b.lastIndexOf(\'/\');\n    return a.substring(0, as + 1).equals(bs.substring(0, bs + 1));\n  }',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALu3///kM='),(289,1,'2010-06-14 16:41:29','P',1,'Like with the 2-tree form of processEntry, I think you want actually a 4th tree here, the WorkingTreeIterator.\n\nYea, its ugly.  You are trying to do a merge across 4 things:\n\n * HEAD\n * index\n * working directory\n * target tree\n\nAnd the rules are about how working directory needs to match index and/or HEAD in order for an edit from target to be applied.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALu3///kQ='),(206,1,'2010-06-14 16:41:29','P',1,'I think its going to be faster to add a WorkingTreeIterator to the same walk, and using the existence of its WorkingTreeIterator on the current path name to tell you if the file exists, or not.\n\nThat strategy is based off doing a directory listing and testing set contents in memory, rather than doing a stat() call to test for the name being present.  It also lets you avoid the (relatively expensive) getEntryPathString() call.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALu3///kU='),(134,1,'2010-06-14 16:41:29','P',1,'If we already passed these arguments to the constructor, why do we have to pass them again to this method?',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALu3///kY='),(112,5,'2010-07-05 23:51:57','P',1,'Done','AAALu3///kI=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///P0='),(491,5,'2010-07-05 23:51:57','P',1,'Done','AAALu3///kE=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Pg='),(464,5,'2010-07-05 23:51:57','P',1,'Done','AAALu3///kA=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Pk='),(289,5,'2010-07-05 23:51:57','P',1,'Done','AAALu3///kQ=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Po='),(252,5,'2010-07-05 23:51:57','P',1,'ok, did what you suggested. One thing I did different: in the loop I deleted the file before I deleted the emptyParents.','AAALu3///kM=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Ps='),(134,5,'2010-07-05 23:51:57','P',1,'Done','AAALu3///kY=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Pw='),(707,1,'2010-06-14 16:41:29','P',1,'Like the status method above, I never meant for this to be in the DirCacheEntry code.  Instead I meant for it to be in some other class that is interacting with the TreeWalk and the WorkingTreeIterator.  That way we can write out through the IResource APIs and properly notify the workbench of an edit.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///k0='),(598,1,'2010-06-14 16:41:29','P',1,'FWIW, I never intended for this DirCacheEntry class to be responsible for this sort of status check code.  I meant for this to go into some other new class that was running a TreeWalk of some sort over a FileTreeIterator and a DirCacheIterator.\n\nFor example, FileTreeIterator already has the ability to compute the ObjectId of the file on the fly.  This is derived through the WorkingTreeIterator base class.\n\nBy doing this sort of stuff through the WorkingTreeIterator, we can use the Eclipse IResource APIs to access the files when inside of EGit, rather than relying on java.io.File.  This means we could rely on the Eclipse stat cache rather than always hitting stat() on the filesystem, and we could make use of the IResource APIs to modify the files, so the workbench would be properly notified of any edits we make.\n\nRelying on WorkingTreeIterator might also simplify some of the logic around the mode test.  Its already converted the filesystem mode into the raw mode format we use in the index, making direct compares easier.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///k4='),(674,1,'2010-06-14 16:41:29','P',1,'This can happen if the user is racing with us and removes the file after we\'ve checked for it existing.  Instead we should silently treat this as though length() ==0 and exists() == false.  Which above means \"return true\".  So we should just document why its OK to simply \"return true\" here, and return true.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///k8='),(711,1,'2010-06-14 16:41:29','P',1,'I think its dangerous to delete the file and rewrite it in place.  Its safer to write to a temporary file in the target directory, and rename the temporary file over to the real name.  If the rename fails (e.g. due to Windows stupidity), you can try deleting the target and then renaming.\n\nIIRC C git takes this approach to file writing.  It almost always writes to a temporary file in the same directory and then tries to rename over to the target.  That way if you crash while writing, the user isn\'t left with a half-written file that might somehow be taken as an edit.  Instead they are left with a file that isn\'t updated at all.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///kc='),(729,1,'2010-06-14 16:41:29','P',1,'I\'m pretty sure our setLastModified takes milliseconds.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///kg='),(715,1,'2010-06-14 16:41:29','P',1,'This needs to be in a try/finally so that we ensure the file was closed.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///kk='),(713,1,'2010-06-14 16:41:29','P',1,'Why are we writing out through a channel?  Why not just write to the file stream?',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///ko='),(710,1,'2010-06-14 16:41:29','P',1,'Using getCachedBytes() is faster, it doesn\'t make a copy, but you have to promise you won\'t modify the array.  :-)',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///ks='),(709,1,'2010-06-14 16:41:29','P',1,'This returns null if the object doesn\'t exist in the repository.  This could happen in the case of repository corruption on disk.  We should at least give a better error message than NullPointerException when the object isn\'t present, like throwing back a MissingObjectException.\n\nIn hindsight this is a mess.  The open family on Repository should be throwing that MissingObjectException and never return null.  Every single caller wants the object, or throws.  We really need to fix that in the API, and then fix the callers.  But until then, callers are responsible for checking.  *sigh*',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///kw='),(664,1,'2010-06-14 16:41:29','P',1,'Please don\'t print stack traces to System.err.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///lc='),(653,1,'2010-06-14 16:41:29','P',1,'We should also be looking for the \"racy git\" case here.\n\nIf mightBeRacilyClean() returns true, we need to do a content check, no matter what forceContentCheck says.  This is to avoid the case where the index was written out with the same timestamp as the file itself, making the file timestamp somewhat in doubt about being modified or being clean.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///lg='),(649,1,'2010-06-14 16:41:29','P',1,'Our getLastModified() is returning milliseconds.  Dividing by 1000000L here is going to produce the wrong unit.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///lk='),(690,1,'2010-06-14 16:41:29','P',1,'In light of Ifc4278078b298781d55cf5421e9647a21fa5db24 being merged first, we probably should be using the Repository\'s FS here.  Which means we might need to be passing it down.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///lo='),(670,1,'2010-06-14 16:41:29','P',1,'Again, don\'t print to System.err.',NULL,825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALu3///lY='),(715,5,'2010-07-05 23:51:57','P',1,'Done','AAALu3///kk=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///P8='),(713,5,'2010-07-05 23:51:57','P',1,'cause I saw it like that in GitIndex#checkoutEntry. Do you remember why they did so - performance?','AAALu3///ko=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///QA='),(711,5,'2010-07-05 23:51:57','P',1,'same argument as with \"racy git\". I agree but would like to do it in a follow-up proposal','AAALu3///kc=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///QE='),(729,5,'2010-07-05 23:51:57','P',1,'Done','AAALu3///kg=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///QI='),(653,5,'2010-07-05 23:51:57','P',1,'yes, that\'s true. But couldn\'t we do that in another proposal? I would like not to more topics to this proposal. WorkDirCheckout was not handling it and this proposal is about a port of the semantics of WorkDirCheckout. I agree think we should not make use of this Checkout without racy git situations are handled.','AAALu3///lg=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///QM='),(710,5,'2010-07-05 23:51:57','P',1,'Done','AAALu3///ks=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///uM='),(709,5,'2010-07-05 23:51:57','P',1,'Done','AAALu3///kw=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///uQ='),(707,5,'2010-07-05 23:51:57','P',1,'that\'s different from isModified. The isModified() method can be put to the WorkingTreeIterator. But this method writes to the WorkingTree and that\'s not what WorkingTreeIterator is intendet for, or? So, for know, as I would really like to a first merge out I move this method to the DirCacheCheckout class, knowing that we need a better place for it.\nOne problem I faced here: we do have an abstraction to access the WorkTree when walking (reading) on it. Applications could use non-filesystem working-trees in that case. But we don\'t have an working-tree abstraction which allows to create/update/delete files. Do we need it?\nI was trying out a first attempt to have WorkingTreeWriters and one implementation for it, but it grew big enough that I decided I would like seperate this issue from the important merge.','AAALu3///k0=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///uU='),(649,5,'2010-07-05 23:51:57','P',1,'Done','AAALu3///lk=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///w4='),(598,5,'2010-07-05 23:51:57','P',1,'I moved this method into the WorkingTreeIterator','AAALu3///k4=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///w8='),(690,5,'2010-07-05 23:51:57','P',1,'Done','AAALu3///lo=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///wk='),(674,5,'2010-07-05 23:51:57','P',1,'we don\'t check for existence anymore in the new location of this method - the WorkingTreeIterator','AAALu3///k8=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///wo='),(670,5,'2010-07-05 23:51:57','P',1,'same as  aboth','AAALu3///lY=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///ws='),(664,5,'2010-07-05 23:51:57','P',1,'sure, you are right. This is blindly copied from GitIndex where we do the same. This this code went into WorkingTreeIterator where we can compare IDs this may even not be needed anymore','AAALu3///lc=',825,2,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java','AAALwX///ww='),(110,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///N8=',825,4,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALwX///FA='),(110,4,'2010-07-06 15:14:33','P',1,'left square bracket is wrong here :\ns/[0}/{0}/',NULL,825,4,'org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties','AAALwX///N8='),(675,5,'2010-07-22 15:46:12','P',1,'Shawn, I found problems with this implementation. Problem is that we will not go into combineDF() always. I saw it not happen when there is no gap between the file and the dir. I added tests to NameConflictTreeWalk tests which show the problem.\n\nI am also not sure whether we always enter popEntriesEqual to clean up after we left the D/F conflict path.\n\nI added another implementation of this in http://egit.eclipse.org/r/#change,1169.','AAALwX//+7Y=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALw3///1s='),(745,1,'2010-07-16 02:10:14','P',1,'OK, thanks for explaining why the brute force approach is used here inside of isModified().  Its fine for now.','AAALwX//+7w=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwn////M='),(728,1,'2010-07-16 02:10:14','P',1,'Oddly, Git takes the attitude that if a file is in the ignore list, its OK for Git to destroy it, because its probably a build artifact or something else that is generated.  Though maybe that only applies to ignores that came from a .gitignore that is tracked?  I\'m pretty sure though C Git will happily delete a conflicting ignored file.','AAALwX//+7I=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwn////Q='),(127,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///N4=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///E8='),(745,1,'2010-07-06 20:46:28','P',1,'Why do we have to setup a whole new tree walk here?  Can\'t you use the existing walk state to check this?',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///J4='),(728,1,'2010-07-06 20:46:28','P',1,'Correct.  This cleanup is only safe if these paths are registered in the ignore list.',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///J8='),(675,1,'2010-07-06 20:46:28','P',1,'A NameConflictTreeWalk should have dived into the working tree and told you about these conflicts.\n\nIf the tree wants to put a blob at \"foo\", but the working directory has \"foo/bar.c\" and \"foo/other.c\", so \"foo\" is a directory, you should get:\n\n  Path \"foo\":  Index blob;  working directory tree\n  Path \"foo/bar.c\":  Index none; working directory file\n  Path \"foo/other.c\":  Index none; working directory file\n\nThis means that you don\'t need to implement this recursion logic, you just need to keep track of D/F conflicts by storing the prefix path and then on each subsequent step of the walker check to see if the path is covered by one of those prefix paths.  If it is, you are inside of a D/F conflict and the working tree is conflicting with the blob record.\n\nActually, this is all something that the NameConflictTreeWalk should be able to tell you.  Just add a isDirectoryFileConflict() method to NameConflictTreeWalk that can export this, and keeps track of the current state for you.\n\nThe basic logic might be:\n\n* in combineDF() store the treeMatch iterator into a new dfConflict field, inside of the \"if (treeMatch != null) {\" condition near the end of the method.  Only set the field if it is currently null.\n* implement isDirectoryFileConflict to return true if dfConflict != null\n* modify popEntriesEqual to clear dfConflict if dfConflict is any of the current iterators, before popping.',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///KA='),(341,1,'2010-07-06 20:46:28','P',1,'I would be willing to bet you a beer next time we meet up in person that just doing:\n\n  if (!parentFile.delete())\n    break;\n\nis faster.  We have to do a system call to read the directory contents, and the operating system is forbidden from letting us remove a directory so long as it has at least one file/directory within it.  So we can accomplish both tasks in one system call by trying the delete, and aborting as soon as it doesn\'t work.',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Kc='),(662,1,'2010-07-06 20:46:28','P',1,'Should this be private?',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///KE='),(304,1,'2010-07-06 20:46:28','P',1,'We really should report on these failures.  On Windows if an application has a file open (e.g. Microsoft Word has the document file open) and we try to delete it, the delete fails by returning false.  Now the working directory has finished switching over, but there is this untracked file left laying around because an external application outside of our control is doing bad things to us.\n\nIMHO, its a checkout failure if we can\'t remove the file we want to remove... but since we are committed at this point to finishing the checkout we should keep going and report failure at the end after everything has been updated.  Ideally we make the list of left-behind files available to the calling application, so it can help the user to handle this messed up working tree by offering to retry deleting these files after they have closed the application(s) using them.',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Kg='),(319,1,'2010-07-06 20:46:28','P',1,'Wasn\'t this already set by checkoutEntry?  And likewise with the length, I suggest below that it should be set in checkout Entry.',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///KI='),(332,1,'2010-07-06 20:46:28','P',1,'Style-nit: This method can be static.',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Kk='),(826,1,'2010-07-06 20:46:28','P',1,'Shouldn\'t we also set the length here?',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///KM='),(205,1,'2010-07-06 20:46:28','P',1,'For an empty tree like thing, use new EmptyTreeIterator() instead.  When you later ask for this slot as a CanonicalTreeParser type you will get back a null pointer.  (TreeWalk internally creates an EmptyTreeIterator as it dives down into non-existent subdirectories.)',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Ko='),(793,1,'2010-07-06 20:46:28','P',1,'Given that we have already done this in the caller, do we also need to repeat it here?',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///KQ='),(142,1,'2010-07-06 20:46:28','P',1,'We\'re trying to get rid of the Tree class.  If you need a tree type thing, use a RevTree.',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Ks='),(378,1,'2010-07-06 20:46:28','P',1,'This test is far cheaper than the cost to get a path string, *or* to get ObjectIds, and yet happens for untracked files that aren\'t properly git ignored by us... so it happens a lot.  Pull this test up to the very start of the method so we can fail out much more rapidly when it occurs.',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///KU='),(374,1,'2010-07-06 20:46:28','P',1,'Ick.  Maybe make the TreeWalk a field so you can just do tw.getPathString() here instead?',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///KY='),(438,4,'2010-07-06 15:14:33','P',1,'typo: s/conflicts/conflict/',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///M0='),(426,4,'2010-07-06 15:14:33','P',1,'typo: s/Non-Exisiting/Non-Existing/',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///M4='),(422,4,'2010-07-06 15:14:33','P',1,'typo: s/non-exisiting/non-existing/',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///M8='),(743,4,'2010-07-06 15:14:33','P',1,'Couldn\'t this be private ?',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///MI='),(723,4,'2010-07-06 15:14:33','P',1,'should be documented how this situation is handled',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///MM='),(612,4,'2010-07-06 15:14:33','P',1,'style nit: add blanks around != operator\n\nmore of this type below',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Mo='),(665,4,'2010-07-06 15:14:33','P',1,'Is this a TODO ?',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///MQ='),(603,4,'2010-07-06 15:14:33','P',1,'javadoc missing for parameter path',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Ms='),(602,4,'2010-07-06 15:14:33','P',1,'Start sentence with uppercase letter',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Mw='),(153,4,'2010-07-06 15:14:33','P',1,'object not class',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///N0='),(127,4,'2010-07-06 15:14:33','P',1,'we create a checkout object here not a class',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///N4='),(379,4,'2010-07-06 15:14:33','P',1,'typo and incomplete comment, better:\n\nfile only exists in working tree -> ignore it',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///NA='),(292,4,'2010-07-06 15:14:33','P',1,'cannotDeleteFile: this doesn\'t look like the correct message\n\nI would rather expect a dedicated exception here, javadoc for setFailOnConflict() says this would throw a CheckoutConflictException',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Ng='),(256,4,'2010-07-06 15:14:33','P',1,'typo: s/ant/want/',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Nk='),(352,4,'2010-07-06 15:14:33','P',1,'s/with the index:/with the corresponding index entry:/',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///NM='),(245,4,'2010-07-06 15:14:33','P',1,'style nit:\ns/processing/Processing/',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///No='),(328,4,'2010-07-06 15:14:33','P',1,'looks like wrong message text',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///NQ='),(211,4,'2010-07-06 15:14:33','P',1,'same as above, the method scans 2 trees but is named prescanOneTree',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Ns='),(174,4,'2010-07-06 15:14:33','P',1,'this method is named preScanTwoTrees but in fact it scans 3 trees, this seems inconsistent',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX///Nw='),(211,5,'2010-07-08 23:47:22','P',1,'see comment above','AAALwX///Ns=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+/A='),(205,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///Ko=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+/E='),(174,5,'2010-07-08 23:47:22','P',1,'This method walks over two real git trees (head und merge). The two other things I am walking over are not really trees: the index (DirCache) is not a tree and the FileSystem with our working tree is also no tree. When we enter this method then the end-user has specified exactly two trees - and index and working tree are derived from the current repo. That\'s I guess why this method was once named preScanTwoTrees().','AAALwX///Nw=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+/I='),(142,5,'2010-07-08 23:47:22','P',1,'changed all the tree references to ObjectID because I need Ids and not trees. The main thing I do with the trees is feeding them into the treewalk - and therefore (strangly?) I cannot put a tree itself but an Id.\n\nOne  problem remains: that is one remaining call to Tree.findBlobMember() in hasParentBlob() (now called mergeTreeHasParentBlob()). I asked in http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg00458.html about the meaning of this call and would be happy to remove this call. Because of this problem I still have a reference to a Tree, but not in the API of this class.','AAALwX///Ks=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+/M='),(153,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///N0=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+/Y='),(292,5,'2010-07-08 23:47:22','P',1,'you are right - this exception is completely wrong. I changed it.','AAALwX///Ng=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//++0='),(256,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///Nk=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//++4='),(245,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///No=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//++8='),(328,5,'2010-07-08 23:47:22','P',1,'created a new exception for that','AAALwX///NQ=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//++A='),(319,5,'2010-07-08 23:47:22','P',1,'i put everything in checkoutEntry()','AAALwX///KI=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//++E='),(304,5,'2010-07-08 23:47:22','P',1,'I added a boolean return value to the checkout method. If false is returned this means that not all obsolete files could be deleted and getToBeDeleted() contains the path names of the remaining files.','AAALwX///Kg=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//++Y='),(743,5,'2010-07-08 23:47:22','P',1,'Done',NULL,825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+70='),(723,5,'2010-07-08 23:47:22','P',1,'the semantics is not clear to me, see my comment below. I\'ll document if it is clear.','AAALwX///MM=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+7E='),(728,5,'2010-07-08 23:47:22','P',1,'Don\'t get it: if pathes are in the ignore list it is even more dangerouse to delete files, or?','AAALwX///J8=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+7I='),(793,5,'2010-07-08 23:47:22','P',1,'I stated now explicitly in the docs that the parent folder has to exist before this method is called.  And of course: I removed this mkdirs.','AAALwX///KQ=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+7s='),(745,5,'2010-07-08 23:47:22','P',1,'I want to do this in a later optimization of checkout. I would need to delay the decision of what to do with a certain entry until the Treewalk has walked also the whole subtree.\nExample: \nHead: foo/c\nIndex: foo/c, foo/d\nMerge: foo\n\nThe first entry I have to deal with is \"foo\" and I detect a file/folder conflict. To decide what to do with foo I have to know wether index entry foo/c is clean - but this entry comes later in the Treewalk.\n\nI was planning to store a list of (path,entry, dirtyOp, cleanOp) triples: when I finally found out the index under path is clean/dirty then the entry is processed according to cleanOp/dirtyOp.  Operations could be UPDATE,CONFLICT ...\n\nBut as I said: to reduce complexity for this proposal I did a brute force attempt to start a new walk.','AAALwX///J4=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+7w='),(675,5,'2010-07-08 23:47:22','P',1,'I\'ll propose the change to NameConflictTreeWalk. Only one confirmation needed:\nIn the third step you mention \"before popping\". After reading the code I think \"t.back(t.matchShift);t.matchShift = 0\" is your \"pop\" implementation, right?','AAALwX///KA=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+7Y='),(665,5,'2010-07-08 23:47:22','P',1,'yes, that\'s a TODO. Similar in WorkDirCheckout where this was copied from.','AAALwX///MQ=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+80='),(662,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///KE=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+84='),(612,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///Mo=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+88='),(352,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///NM=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+90='),(341,5,'2010-07-08 23:47:22','P',1,'that\'s right. I will not bet against it (although I owe you lot of beers for again and again finding style-nits and serious problems in my code. Never ever was my code so well reviewed).\n\nI was thinking about removing this method. We already walked over every single file and folder in the workTree. We should know the pathes of empty folders. But a first tryout grew too complicated and I wrote it down on the todo list.\n\nI more and more think it was a mistake to copy WorkDircheckout and create DirCacheCheckout from that copy. I was overwhelmed by so many topics that I thought this would save me some effort. But understanding WorkDirCheckout and writing DirCachecheckout from scratch would have been better because I wouldn\'t copy all that strange code.','AAALwX///Kc=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+94='),(332,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///Kk=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+98='),(826,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///KM=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+9A='),(426,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///M4=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+9c='),(422,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///M8=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+9g='),(374,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///KY=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+9k='),(379,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///NA=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+9o='),(603,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///Ms=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+9Q='),(378,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///KU=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+9s='),(602,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///Mw=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+9U='),(438,5,'2010-07-08 23:47:22','P',1,'Done','AAALwX///M0=',825,4,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwX//+9Y='),(570,5,'2010-07-22 14:32:26','P',1,'I added also a check for m==0 because the original check went explicitly against a merge-tree which has a file in this directory/file conflict\n\nBUT: during testing this I detected our isDirectoryFileConflict() was implemented wrong. Therefore I put the work on NameConflictTreeWalker into an own change. I am sure what is in that proposal is sub-optimal ... but it works. Let\'s focus on this change on DirCacheCheckout.','AAALwn////A=',825,5,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALw3///2c='),(113,5,'2010-07-22 14:32:26','P',1,'Done','AAALwn////U=',825,5,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALw3///40='),(570,1,'2010-07-16 02:14:26','P',1,'Isn\'t this just:\n\n  if (walk.isDirectoryFileConflict())\n\nat this point?  Basically we can\'t rely on Tree anymore, its dead and going away.  So we should be able to do the same thing with TreeWalk/NameConflictTreeWalk... and if we can\'t we should try to address the problem in those APIs rather than making new code rely on deprecated code.',NULL,825,5,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwn////A='),(113,1,'2010-07-16 02:14:26','P',1,'Style-nit: Our public API should return Map, Set, List and not a concrete implementation type.  Sorry I missed this during earlier review iterations.',NULL,825,5,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALwn////U='),(126,5,'2010-08-17 22:09:03','P',1,'Done','AAALyH///ok=',825,7,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALyH///mM='),(126,8,'2010-08-16 22:34:12','P',1,'s/pathes/paths/',NULL,825,7,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALyH///ok='),(135,1,'2010-08-23 23:54:05','P',1,'We shouldn\'t rely on platform encoding.  Please specify \"UTF-8\" or something here.',NULL,825,15,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReadTreeTest.java','AAALyn///7I='),(791,1,'2010-08-23 23:54:05','P',1,'Style-nit: File.createTempFile() should be sufficient since we already import java.io.File here.  And we prefer spaces around operators like +.\n\nFinally, should we use \"._\" instead as the prefix?  That way the temporary file is hidden from view when a user is doing `ls` at the same time as a checkout is occurring?',NULL,825,15,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALyn///7M='),(497,1,'2010-08-23 23:54:05','P',1,'Actually, you *might* have the id of the tree.  Right now its really rare though if JGit is involved.  :-(',NULL,825,15,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALyn///7Q='),(398,1,'2010-08-23 23:54:05','P',1,'Yes.  Its always a conflict.  I\'m not sure you can sanely resolve this case otherwise.',NULL,825,15,'org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java','AAALyn///7U='),(476,5,'2010-08-24 06:18:07','P',1,'Here DirCacheCheckout would fail on a assertion for which WorkDirCheckout succeed (see the comment). How do we handle this.',NULL,825,16,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReadTreeTest.java','AAALyn///40='),(451,5,'2010-08-24 06:18:07','P',1,'Here DirCacheCheckout would fail on a assertion for which WorkDirCheckout succeed (see the comment). How do we handle this.',NULL,825,16,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReadTreeTest.java','AAALyn///44='),(439,5,'2010-08-24 06:18:07','P',1,'Here DirCacheCheckout would fail on a assertion for which WorkDirCheckout succeed (see the comment). How do we handle this.',NULL,825,16,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReadTreeTest.java','AAALyn///48='),(562,5,'2010-08-24 06:18:07','P',1,'Here DirCacheCheckout would fail on a assertion for which WorkDirCheckout succeed (see the comment). How do we handle this.',NULL,825,16,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReadTreeTest.java','AAALyn///4s='),(551,5,'2010-08-24 06:18:07','P',1,'Here DirCacheCheckout would fail on a assertion for which WorkDirCheckout succeed (see the comment). How do we handle this.',NULL,825,16,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReadTreeTest.java','AAALyn///4w='),(375,5,'2010-08-24 06:18:07','P',1,'Here DirCacheCheckout would fail on a assertion for which WorkDirCheckout succeed (see the comment). How do we handle this.',NULL,825,16,'org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReadTreeTest.java','AAALyn///5A='),(160,4,'2010-06-11 22:33:14','P',1,'You describe the parameters but provide no text to explain the method itself.',NULL,828,1,'org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java','AAALu3///qI='),(96,4,'2010-06-11 22:27:21','P',1,'I would prefer COLOR_DARK_GREEN since GREEN is very light and hard to read on white background. \n\nMaybe colors could be also made configurable in another step via preferences. Think about red-green color blind users.',NULL,829,1,'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitMessageViewer.java','AAALu3///qQ='),(1180,46,'2010-06-14 16:04:34','P',1,'Done','AAALu3///ng=',835,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java','AAALu3///lA='),(1172,46,'2010-06-14 16:04:34','P',1,'Done','AAALu3///nk=',835,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java','AAALu3///lE='),(1157,46,'2010-06-14 16:04:34','P',1,'Done','AAALu3///nU=',835,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java','AAALu3///lI='),(1137,46,'2010-06-14 16:04:34','P',1,'Done','AAALu3///nY=',835,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java','AAALu3///lM='),(1122,46,'2010-06-14 16:04:34','P',1,'Done','AAALu3///nc=',835,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java','AAALu3///lQ='),(1122,1,'2010-06-14 14:56:33','P',1,'I think its OK to assume section != null here.',NULL,835,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java','AAALu3///nc='),(1180,1,'2010-06-14 14:56:33','P',1,'We should export lower case section names, so the caller has a consistent case to examine against in the returned set.\n\nIIRC, e.section is null on a blank line or a comment line.  These shouldn\'t appear in the returned set.  So please add a if (e.section != null) guard around this addition.',NULL,835,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java','AAALu3///ng='),(1172,1,'2010-06-14 14:56:33','P',1,'Style-nit:  Just use the default constructor supplied by the compiler.  It will be visible to public, but the class is private, so its effectively not visible.',NULL,835,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java','AAALu3///nk='),(1157,1,'2010-06-14 14:56:33','P',1,'Like below with SectionNames, I think we should export the name in lower case, so the caller sees a consistent case in the returned set.',NULL,835,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java','AAALu3///nU='),(1137,1,'2010-06-14 14:56:33','P',1,'Like in hashCode, I think its OK to assume section != null.',NULL,835,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java','AAALu3///nY='),(1280,46,'2010-06-14 15:31:24','P',1,'Done','AAALu3///oM=',836,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALu3///mk='),(1278,46,'2010-06-14 15:31:24','P',1,'Hope patch set 4 does the right thing (see my remarks there)','AAALu3///oE=',836,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALu3///mo='),(1278,46,'2010-06-14 15:31:24','P',1,'Done','AAALu3///ok=',836,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALu3///ms='),(1278,1,'2010-06-14 14:42:00','P',1,'Deciding \"bareness\" is more than just looking at core.bare in the configuration file.\n\nIIRC the algorithm is something like:\n\n  IF core.bare is set\n    USE core.bare\n\n  ELSE IF GIT_DIR explicitly given and no GIT_WORK_TREE\n    ASSUME bare\n\n  ELSE IF getDirectory().getName() is exactly \".git\"\n    ASSUME not bare\n\n  ELSE\n    ASSUME bare\n\nSince this is complex enough, and the code throws an exception if its bare, we probably should introduce a:\n\n  public boolean isBare()\n\nmethod to perform the decision making, and then define getWorkDir to throw when isBare() is true.\n\nAlso, bare repositories don\'t have index files, so getIndex() and getIndexFile() should also throw the same exception.',NULL,836,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALu3///oE='),(1278,2,'2010-06-14 14:07:01','P',1,'We should probably have constants for these types of things.',NULL,836,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALu3///ok='),(1280,1,'2010-06-14 14:42:00','P',1,'This should be a translated message.',NULL,836,1,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java','AAALu3///oM='),(128,46,'2010-06-14 15:31:20','P',1,'Done','AAALu3///nw=',836,3,'org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java','AAALu3///mg='),