# HG changeset patch # User Artem Tikhomirov # Date 1333038543 -7200 # Node ID cd658b24a62000c790386fa241f2bec282e1e71a # Parent ead6c67f3319a36c9ff286a7632441ee503b585a FIXMEs: javadoc, proper use of constants diff -r ead6c67f3319 -r cd658b24a620 cmdline/org/tmatesoft/hg/console/Main.java --- a/cmdline/org/tmatesoft/hg/console/Main.java Thu Mar 29 18:05:05 2012 +0200 +++ b/cmdline/org/tmatesoft/hg/console/Main.java Thu Mar 29 18:29:03 2012 +0200 @@ -17,6 +17,7 @@ package org.tmatesoft.hg.console; import static org.tmatesoft.hg.repo.HgRepository.TIP; +import static org.tmatesoft.hg.repo.HgRepository.WORKING_COPY; import java.io.File; import java.io.IOException; @@ -434,7 +435,7 @@ // final Path path = Path.create("missing-dir/"); // HgWorkingCopyStatusCollector wcsc = HgWorkingCopyStatusCollector.create(hgRepo, path); HgWorkingCopyStatusCollector wcsc = HgWorkingCopyStatusCollector.create(hgRepo, new PathGlobMatcher("mi**")); - wcsc.walk(TIP, new StatusDump()); + wcsc.walk(WORKING_COPY, new StatusDump()); } /* @@ -600,7 +601,7 @@ sc.change(0, dump); System.out.println("\nStatus against working dir:"); HgWorkingCopyStatusCollector wcc = new HgWorkingCopyStatusCollector(hgRepo); - wcc.walk(TIP, dump); + wcc.walk(WORKING_COPY, dump); System.out.println(); System.out.printf("Manifest of the revision %d:\n", r2); hgRepo.getManifest().walk(r2, r2, new ManifestDump()); diff -r ead6c67f3319 -r cd658b24a620 src/org/tmatesoft/hg/core/HgStatusCommand.java --- a/src/org/tmatesoft/hg/core/HgStatusCommand.java Thu Mar 29 18:05:05 2012 +0200 +++ b/src/org/tmatesoft/hg/core/HgStatusCommand.java Thu Mar 29 18:29:03 2012 +0200 @@ -165,12 +165,12 @@ * @param statusHandler callback to get status information * @throws HgCallbackTargetException propagated exception from the handler * @throws HgException subclass thereof to indicate specific issue with the command arguments or repository state + * @throws IOException if there are (further unspecified) errors while walking working copy * @throws CancelledException if execution of the command was cancelled - * @throws IOException FIXME EXCEPTIONS WTF it's doing here if there are (further unspecified) errors while walking working copy * @throws IllegalArgumentException if handler is null * @throws ConcurrentModificationException if this command already runs (i.e. being used from another thread) */ - public void execute(HgStatusHandler statusHandler) throws HgCallbackTargetException, HgException, CancelledException, IOException { + public void execute(HgStatusHandler statusHandler) throws HgCallbackTargetException, HgException, IOException, CancelledException { if (statusHandler == null) { throw new IllegalArgumentException(); } diff -r ead6c67f3319 -r cd658b24a620 src/org/tmatesoft/hg/repo/HgStatusInspector.java --- a/src/org/tmatesoft/hg/repo/HgStatusInspector.java Thu Mar 29 18:05:05 2012 +0200 +++ b/src/org/tmatesoft/hg/repo/HgStatusInspector.java Thu Mar 29 18:29:03 2012 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2011 TMate Software Ltd + * Copyright (c) 2010-2012 TMate Software Ltd * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,6 +16,7 @@ */ package org.tmatesoft.hg.repo; +import org.tmatesoft.hg.internal.Callback; import org.tmatesoft.hg.util.Path; /** @@ -24,6 +25,7 @@ * @author Artem Tikhomirov * @author TMate Software Ltd. */ +@Callback public interface HgStatusInspector { void modified(Path fname); void added(Path fname); diff -r ead6c67f3319 -r cd658b24a620 src/org/tmatesoft/hg/repo/HgWorkingCopyStatusCollector.java --- a/src/org/tmatesoft/hg/repo/HgWorkingCopyStatusCollector.java Thu Mar 29 18:05:05 2012 +0200 +++ b/src/org/tmatesoft/hg/repo/HgWorkingCopyStatusCollector.java Thu Mar 29 18:29:03 2012 +0200 @@ -151,11 +151,16 @@ } /** - * may be invoked few times, TIP or WORKING_COPY indicate comparison shall be run against working copy parent - * XXX NOTE, use of TIP constant requires certain care. TIP here doesn't mean latest cset, but actual working copy parent. + * Walk working copy, analyze status for each file found and missing. + * May be invoked few times. * - * @param baseRevision - * @param inspector + *

There's no dedicated constant to for working copy parent, at least now. + * Use {@link HgRepository#WORKING_COPY} to indicate comparison + * shall be run against working copy parent. Although a bit confusing, single case doesn't + * justify a dedicated constant. + * + * @param baseRevision revision index to check against, or {@link HgRepository#WORKING_COPY}. Note, {@link HgRepository#TIP} is not supported. + * @param inspector callback to receive status information * @throws IOException to propagate IO errors from {@link FileIterator} * @throws CancelledException if operation execution was cancelled * @throws HgRuntimeException subclass thereof to indicate issues with the library. Runtime exception @@ -170,6 +175,7 @@ if (getDirstateParentManifest() == null) { initDirstateParentManifest(); } + // XXX NOTE, use of TIP for working copy parent is questionable, at least. Instead, TIP shall mean latest cset or not allowed at all ManifestRevision collect = null; // non null indicates we compare against base revision Set baseRevFiles = Collections.emptySet(); // files from base revision not affected by status calculation if (baseRevision != TIP && baseRevision != WORKING_COPY) { @@ -285,11 +291,12 @@ } /** + * A {@link #walk(int, HgStatusInspector)} that records all the status information in the {@link HgStatusCollector.Record} object. * - * @param baseRevision + * @see #walk(int, HgStatusInspector) + * @param baseRevision revision index to check against, or {@link HgRepository#WORKING_COPY}. Note, {@link HgRepository#TIP} is not supported. * @return information object that describes change between the revisions * @throws IOException to propagate IO errors from {@link FileIterator} - * @throws CancelledException if operation execution was cancelled * @throws HgRuntimeException subclass thereof to indicate issues with the library. Runtime exception */ public HgStatusCollector.Record status(int baseRevision) throws IOException, HgRuntimeException { diff -r ead6c67f3319 -r cd658b24a620 src/org/tmatesoft/hg/util/RegularFileStats.java --- a/src/org/tmatesoft/hg/util/RegularFileStats.java Thu Mar 29 18:05:05 2012 +0200 +++ b/src/org/tmatesoft/hg/util/RegularFileStats.java Thu Mar 29 18:29:03 2012 +0200 @@ -102,7 +102,7 @@ // can't check isFile because Java would say false for a symlink with non-existing target if (f.isDirectory()) { // perhaps, shall just collect stats for all files and set false to exec/link flags? - throw new IllegalArgumentException(); // FIXME EXCEPTIONS + throw new IllegalArgumentException(); } final String dirName = f.getParentFile().getAbsolutePath(); final String fileName = f.getName(); diff -r ead6c67f3319 -r cd658b24a620 test/org/tmatesoft/hg/test/TestStatus.java --- a/test/org/tmatesoft/hg/test/TestStatus.java Thu Mar 29 18:05:05 2012 +0200 +++ b/test/org/tmatesoft/hg/test/TestStatus.java Thu Mar 29 18:29:03 2012 +0200 @@ -21,6 +21,7 @@ import static org.junit.Assert.assertTrue; import static org.tmatesoft.hg.core.HgStatus.Kind.*; import static org.tmatesoft.hg.repo.HgRepository.TIP; +import static org.tmatesoft.hg.repo.HgRepository.WORKING_COPY; import java.io.File; import java.util.ArrayList; @@ -382,7 +383,7 @@ final Path file3 = Path.create("dir/file3"); HgWorkingCopyStatusCollector sc = HgWorkingCopyStatusCollector.create(repo, file2, file3); HgStatusCollector.Record r = new HgStatusCollector.Record(); - sc.walk(TIP, r); + sc.walk(WORKING_COPY, r); assertTrue(r.getAdded().isEmpty()); assertTrue(r.getRemoved().isEmpty()); assertTrue(r.getUnknown().isEmpty()); @@ -397,7 +398,7 @@ final Path readme = Path.create("readme"); final Path dir = Path.create("dir/"); sc = HgWorkingCopyStatusCollector.create(repo, readme, dir); - sc.walk(TIP, r = new HgStatusCollector.Record()); + sc.walk(WORKING_COPY, r = new HgStatusCollector.Record()); assertTrue(r.getAdded().isEmpty()); assertTrue(r.getRemoved().size() == 2); for (Path p : r.getRemoved()) { @@ -421,13 +422,13 @@ HgWorkingCopyStatusCollector sc = HgWorkingCopyStatusCollector.create(repo, file3, file5); HgStatusCollector.Record r; - sc.walk(TIP, r = new HgStatusCollector.Record()); + sc.walk(WORKING_COPY, r = new HgStatusCollector.Record()); assertTrue(r.getRemoved().contains(file5)); assertTrue(r.getIgnored().contains(file3)); // // query for the same file, but with sc = HgWorkingCopyStatusCollector.create(repo, new PathGlobMatcher(file3.toString(), file5.toString())); - sc.walk(TIP, r = new HgStatusCollector.Record()); + sc.walk(WORKING_COPY, r = new HgStatusCollector.Record()); assertTrue(r.getRemoved().contains(file5)); assertTrue(r.getIgnored().contains(file3)); }