diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java index 0b5d3d8ffd..ed5cbc69dd 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java @@ -99,6 +99,11 @@ public class HgBrowseCommand extends AbstractCommand implements BrowseCommand cmd.disableLastCommit(); } + if (request.isRecursive()) + { + cmd.recursive(); + } + BrowserResult result = new BrowserResult(); result.setFiles(cmd.execute()); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgFileviewCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgFileviewCommand.java index 2e4eb77cac..b164e7e4a6 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgFileviewCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgFileviewCommand.java @@ -157,6 +157,19 @@ public class HgFileviewCommand extends AbstractCommand return this; } + /** + * Method description + * + * + * @return + */ + public HgFileviewCommand recursive() + { + cmdAppend("-c"); + + return this; + } + /** * Method description * diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg/ext/fileview.py b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg/ext/fileview.py index 727b1d6b5f..7ffd568e0c 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg/ext/fileview.py +++ b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg/ext/fileview.py @@ -48,7 +48,7 @@ def appendTrailingSlash(path): path += '/' return path -def collectFiles(revCtx, path, files, directories): +def collectFiles(revCtx, path, files, directories, recursive): length = 0 paths = [] mf = revCtx.manifest() @@ -66,18 +66,22 @@ def collectFiles(revCtx, path, files, directories): if f.startswith(directory): paths.append(f) - for p in paths: - parts = p.split('/') - depth = len(parts) - if depth is length: - file = revCtx[p] - files.append(file) - elif depth > length: - dirpath = '' - for i in range(0, length): - dirpath += parts[i] + '/' - if not dirpath in directories: - directories.append(dirpath) + if not recursive: + for p in paths: + parts = p.split('/') + depth = len(parts) + if depth is length: + file = revCtx[p] + files.append(file) + elif depth > length: + dirpath = '' + for i in range(0, length): + dirpath += parts[i] + '/' + if not dirpath in directories: + directories.append(dirpath) + else: + for p in paths: + files.append(revCtx[p]) def createSubRepositoryMap(revCtx): subrepos = {} @@ -140,7 +144,7 @@ def fileview(ui, repo, **opts): if path.endswith('/'): path = path[0:-1] transport = opts['transport'] - collectFiles(revCtx, path, files, directories) + collectFiles(revCtx, path, files, directories, opts['recursive']) subRepositories = createSubRepositoryMap(revCtx) for k, v in subRepositories.iteritems(): if k.startswith(path): @@ -155,6 +159,7 @@ cmdtable = { 'fileview': (fileview,[ ('r', 'revision', 'tip', 'revision to print'), ('p', 'path', '', 'path to print'), + ('c', 'recursive', False, 'browse repository recursive'), ('d', 'disableLastCommit', False, 'disables last commit description and date'), ('t', 'transport', False, 'format the output for command server'), ]) diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBrowseCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBrowseCommandTest.java index ef9657d03e..0262dfc36b 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBrowseCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBrowseCommandTest.java @@ -159,6 +159,32 @@ public class HgBrowseCommandTest extends AbstractHgCommandTestBase assertNull(a.getLastModified()); } + /** + * Method description + * + * + * @throws IOException + * @throws RepositoryException + */ + @Test + public void testRecursive() throws IOException, RepositoryException + { + BrowseCommandRequest request = new BrowseCommandRequest(); + + request.setRecursive(true); + + BrowserResult result = new HgBrowseCommand(cmdContext, + repository).getBrowserResult(request); + + assertNotNull(result); + + List foList = result.getFiles(); + + assertNotNull(foList); + assertFalse(foList.isEmpty()); + assertEquals(5, foList.size()); + } + //~--- get methods ---------------------------------------------------------- /**