Index: src/main/java/hudson/plugins/tfs/commands/DetailedHistoryCommand.java =================================================================== --- src/main/java/hudson/plugins/tfs/commands/DetailedHistoryCommand.java (revision 18105) +++ src/main/java/hudson/plugins/tfs/commands/DetailedHistoryCommand.java (working copy) @@ -26,7 +26,7 @@ */ private static final Pattern PATTERN_CHANGESET = Pattern.compile("^[^:]*:[ \t]([0-9]*)\n" + "[^:]*:[ \t](.*)\n[^:]*:[ \t](.*)\n" - + "[^:]*:((?:\n.*)*)\n\n[^\n :]*:(?=\n )((?:\n[ \t]+.*)*)"); + + "[^:]*:(?s)(.*)\n\n[^\n :]*:(?=\n )(.*)\n\n"); /** * An additional regex to split the items into their parts (change type Index: src/test/java/hudson/plugins/tfs/commands/DetailedHistoryCommandTest.java =================================================================== --- src/test/java/hudson/plugins/tfs/commands/DetailedHistoryCommandTest.java (revision 18105) +++ src/test/java/hudson/plugins/tfs/commands/DetailedHistoryCommandTest.java (working copy) @@ -26,23 +26,23 @@ stub(config.getUrl()).toReturn("https//tfs02.codeplex.com"); stub(config.getUserName()).toReturn("snd\\user_cp"); stub(config.getUserPassword()).toReturn("password"); - + Calendar fromTimestamp = Util.getCalendar(2006, 12, 01, 01, 01, 01); Calendar toTimestamp = Util.getCalendar(2008, 06, 27, 20, 00, 0); - + MaskedArgumentListBuilder arguments = new DetailedHistoryCommand(config, "$/tfsandbox", fromTimestamp, toTimestamp).getArguments(); assertNotNull("Arguments were null", arguments); assertEquals("history $/tfsandbox -noprompt -version:D2006-12-01T01:01:01Z~D2008-06-27T20:00:00Z -recursive -format:detailed -server:https//tfs02.codeplex.com -login:snd\\user_cp,password", arguments.toStringWithQuote()); } - + @Test public void assertParsingOfEmptyReader() throws Exception { DetailedHistoryCommand command = new DetailedHistoryCommand(mock(ServerConfigurationProvider.class), "$/tfsandbox", Util.getCalendar(2008, 01, 15), Calendar.getInstance()); List list = command.parse(new StringReader("")); assertNotNull("The list of change sets was null", list); - assertTrue("The list of change sets was not empty", list.isEmpty()); + assertTrue("The list of change sets was not empty", list.isEmpty()); } - + @Test public void assertChangesWithEmptyToolOutput() throws Exception { StringReader reader = new StringReader("No history entries were found for the item and version combination specified.\n\n"); @@ -51,7 +51,7 @@ assertNotNull("The list of change sets was null", list); assertTrue("The list of change sets was not empty", list.isEmpty()); } - + @Test public void assertOneChangeSetFromFile() throws Exception { InputStreamReader reader = new InputStreamReader(DetailedHistoryCommandTest.class.getResourceAsStream("tf-changeset-1.txt")); @@ -60,19 +60,19 @@ assertNotNull("The list of change sets was null", list); assertEquals("The number of change sets in the list was incorrect", 1, list.size()); - + ChangeSet changeSet = list.get(0); assertEquals("The versionwas incorrect", "12472", changeSet.getVersion()); assertEquals("The user was incorrect", "_MCLWEB", changeSet.getUser()); assertEquals("The user was incorrect", "RNO", changeSet.getDomain()); //assertEquals("The date was incorrect", TestUtil.getCalendar(2008, 06, 27, 11, 16, 06).getTime(), changeSet.getDate()); assertEquals("The comment was incorrect", "Created team project folder $/tfsandbox via the Team Project Creation Wizard", changeSet.getComment()); - + Item item = changeSet.getItems().get(0); assertEquals("The item path was incorrect", "$/tfsandbox", item.getPath()); assertEquals("The item action was incorrect", "add", item.getAction()); } - + @Test public void assertTwoChangeSetFromFile() throws Exception { InputStreamReader reader = new InputStreamReader(DetailedHistoryCommandTest.class.getResourceAsStream("tf-changeset-2.txt")); @@ -81,7 +81,7 @@ assertNotNull("The list of change sets was null", list); assertEquals("The number of change sets in the list was incorrect", 2, list.size()); - + ChangeSet changeSet = list.get(0); assertEquals("The version was incorrect", "12472", changeSet.getVersion()); assertEquals("The user was incorrect", "_MCLWEB", changeSet.getUser()); @@ -96,30 +96,30 @@ //assertEquals("The date was incorrect", TestUtil.getCalendar(2008, 06, 27, 13, 19, 49).getTime(), changeSet.getDate()); assertEquals("The comment was incorrect", "first file", changeSet.getComment()); } - + @Test public void assertTwoItemsInAChangeSet() throws Exception { InputStreamReader reader = new InputStreamReader(DetailedHistoryCommandTest.class.getResourceAsStream("tf-changeset-3.txt")); DetailedHistoryCommand command = new DetailedHistoryCommand(mock(ServerConfigurationProvider.class), "$/tfsandbox", Util.getCalendar(2008, 01, 15), Calendar.getInstance()); List list = command.parse(reader); - + assertNotNull("The list of change sets was null", list); assertEquals("The number of change sets in the list was incorrect", 4, list.size()); - + List items = list.get(3).getItems(); assertEquals("Number of items in change set was incorrect", 2, items.size()); } - - @Test(expected=ParseException.class) + + @Test(expected = ParseException.class) public void assertParseExceptionWhenParsingInvalidDate() throws Exception { StringReader reader = new StringReader( "-----------------------------------------\n" + - "Changeset: 12492\n" + - "User: SND\\redsolo_cp\n" + - "Date: this is no date\n" + - "\n" + - "Comment:\n" + - " first file"); + "Changeset: 12492\n" + + "User: SND\\redsolo_cp\n" + + "Date: this is no date\n" + + "\n" + + "Comment:\n" + + " first file"); DetailedHistoryCommand command = new DetailedHistoryCommand(mock(ServerConfigurationProvider.class), "$/tfsandbox", Util.getCalendar(2008, 01, 15), Calendar.getInstance()); command.parse(reader); } @@ -132,24 +132,24 @@ assertNotNull("The list of change sets was null", list); assertEquals("The number of change sets in the list was incorrect", 1, list.size()); } - - @Test(expected=ParseException.class) + + @Test(expected = ParseException.class) public void assertParseExceptionWhenParsingBadFilePath() throws Exception { StringReader reader = new StringReader( "-----------------------------------------\n" + - "Changeset: 12492\n" + - "User: SND\\redsolo_cp\n" + - "Date: 2008-jun-27 11:16:06\n" + - "\n" + - "Comment:\n" + - " Created team project folder $/tfsandbox via the Team Project Creation Wizard\n" + - "\n" + - "Items:\n" + - " add tfsandbox\n"); + "Changeset: 12492\n" + + "User: SND\\redsolo_cp\n" + + "Date: 2008-jun-27 11:16:06\n" + + "\n" + + "Comment:\n" + + " Created team project folder $/tfsandbox via the Team Project Creation Wizard\n" + + "\n" + + "Items:\n" + + " add tfsandbox\n"); DetailedHistoryCommand command = new DetailedHistoryCommand(mock(ServerConfigurationProvider.class), "$/tfsandbox", Util.getCalendar(2008, 01, 15), Calendar.getInstance()); command.parse(reader); } - + @Test public void assertNoCrashForIssue3683() throws Exception { InputStreamReader reader = new InputStreamReader(DetailedHistoryCommandTest.class.getResourceAsStream("issue-3683.txt")); @@ -157,4 +157,30 @@ List list = command.parse(reader); assertEquals("Number of change sets was incorrect", 3, list.size()); } + + + @Test + public void assertLongChangesetsCanBeParsed() throws Exception { + StringBuilder builder = new StringBuilder("-----------------------------------\n" + + "Changeset: 12472\n" + + "User: RNO\\_MCLWEB\n" + + "Date: 2008-jun-27 11:16:06\n" + + "\n" + + "Comment:\n" + + "Created team project folder $/tfsandbox via the Team Project Creation Wizard\n" + + "\n" + + "Items:\n" + ); + + for (int i = 0; i < 40000; i++) { + builder.append(" add $/tfsandbox/file" + i); + } + + builder.append("\n\nblah"); + + StringReader stringReader = new StringReader(builder.toString()); + DetailedHistoryCommand command = new DetailedHistoryCommand(mock(ServerConfigurationProvider.class), "$/tfsandbox", Util.getCalendar(2008, 01, 15), Calendar.getInstance()); + List list = command.parse(stringReader); + assertEquals("Number of change sets was incorrect", 1, list.size()); + } } Index: src/test/java/hudson/plugins/tfs/model/ProjectTest.java =================================================================== --- src/test/java/hudson/plugins/tfs/model/ProjectTest.java (revision 18105) +++ src/test/java/hudson/plugins/tfs/model/ProjectTest.java (working copy) @@ -29,7 +29,7 @@ "Created team project folder $/tfsandbox via the Team Project Creation Wizard\n" + "\n" + "Items:\n" + - " add $/tfsandbox\n")); + " add $/tfsandbox\n\nblah")); Project project = new Project(server, "$/serverpath"); List list = project.getDetailedHistory(Util.getCalendar(2008, 06, 01), Util.getCalendar(2008, 07, 01)); assertNotNull("The returned list was null", list); Index: src/test/resources/hudson/plugins/tfs/commands/tf-changeset-1.txt =================================================================== --- src/test/resources/hudson/plugins/tfs/commands/tf-changeset-1.txt (revision 18105) +++ src/test/resources/hudson/plugins/tfs/commands/tf-changeset-1.txt (working copy) @@ -9,3 +9,6 @@ Items: add $/tfsandbox +blah + + Index: src/test/resources/hudson/plugins/tfs/commands/tf-changeset-2.txt =================================================================== --- src/test/resources/hudson/plugins/tfs/commands/tf-changeset-2.txt (revision 18105) +++ src/test/resources/hudson/plugins/tfs/commands/tf-changeset-2.txt (working copy) @@ -9,6 +9,8 @@ Items: add $/tfsandbox/readme.txt +blah + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Changeset: 12472 User: RNO\_MCLWEB @@ -20,3 +22,5 @@ Items: add $/tfsandbox +blah + Index: src/test/resources/hudson/plugins/tfs/commands/tf-changeset-3.txt =================================================================== --- src/test/resources/hudson/plugins/tfs/commands/tf-changeset-3.txt (revision 18105) +++ src/test/resources/hudson/plugins/tfs/commands/tf-changeset-3.txt (working copy) @@ -10,6 +10,8 @@ edit $/tfsandbox/readme.txt add $/tfsandbox/readme2.txt +blah + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Changeset: 12493 User: SND\redsolo_cp @@ -21,6 +23,8 @@ Items: edit $/tfsandbox/readme.txt +blah + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Changeset: 12492 User: SND\redsolo_cp @@ -32,6 +36,8 @@ Items: add $/tfsandbox/readme.txt +blah + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Changeset: 12472 User: RNO\_MCLWEB @@ -42,3 +48,5 @@ Items: add $/tfsandbox + +blah