How to list locally-modified/unversioned files using svnkit?
Asked Answered
A

2

5

I'm writing a piece of code that, once executed anywhere inside an SVN working copy, locates the root:

File workingDirectory = new File(".").getCanonicalFile();
File wcRoot = SVNWCUtil.getWorkingCopyRoot(workingDirectory, true);

gets the repository url given this root, builds an SVNClientManager given this info and now I'm stuck at how to get a list of anything in the working copy that is not in the repository - this includes locally-modified files, unresolved merges, unversioned files and I'll be happy to hear any anything else I might have missed.

How do I do that ? This snippet seems to require access to the repository itself, not the WC:

clientManager.getLookClient().doGetChanged(...)
Abdullah answered 7/8, 2012 at 18:5 Comment(0)
O
5

This gives you local modifications, i.e. it doesn't look at things that have changed in the repository that are not in your working copy

static def isModded(SvnConfig svn, File path, SVNRevision rev) {
    SVNClientManager mgr = newInstance(null, svn.username, svn.password)
    logger.debug("Searching for modifications beneath $path.path @ $rev")
    mgr.statusClient.doStatus(path, rev, INFINITY, false, false, false, false, { SVNStatus status ->
        SVNStatusType statusType = status.contentsStatus
        if (statusType != STATUS_NONE && statusType != STATUS_NORMAL && statusType != STATUS_IGNORED) {
            lmodded = true
            logger.debug("$status.file.path --> lmodded: $statusType")
        }
    } as ISVNStatusHandler, null)
    lmodded
}

The code I have for this is in groovy but hopefully the use of the svnkit api is obvious enough to work with. SvnConfig is just a local value object containing various details about the repository itself.

Opuntia answered 7/8, 2012 at 18:43 Comment(0)
F
10
public static List<File> listModifiedFiles(File path, SVNRevision revision) throws SVNException {
    SVNClientManager svnClientManager = SVNClientManager.newInstance();
    final List<File> fileList = new ArrayList<File>();
    svnClientManager.getStatusClient().doStatus(path, revision, SVNDepth.INFINITY, false, false, false, false, new ISVNStatusHandler() {
        @Override
        public void handleStatus(SVNStatus status) throws SVNException {
            SVNStatusType statusType = status.getContentsStatus();
            if (statusType != SVNStatusType.STATUS_NONE && statusType != SVNStatusType.STATUS_NORMAL
                    && statusType != SVNStatusType.STATUS_IGNORED) {
                fileList.add(status.getFile());
            }
        }
    }, null);
    return fileList;
}
Feathered answered 23/9, 2012 at 3:56 Comment(1)
To include unversioned files I found I had to remove statusType != SVNStatusType.STATUS_NONE from the if statementImpeller
O
5

This gives you local modifications, i.e. it doesn't look at things that have changed in the repository that are not in your working copy

static def isModded(SvnConfig svn, File path, SVNRevision rev) {
    SVNClientManager mgr = newInstance(null, svn.username, svn.password)
    logger.debug("Searching for modifications beneath $path.path @ $rev")
    mgr.statusClient.doStatus(path, rev, INFINITY, false, false, false, false, { SVNStatus status ->
        SVNStatusType statusType = status.contentsStatus
        if (statusType != STATUS_NONE && statusType != STATUS_NORMAL && statusType != STATUS_IGNORED) {
            lmodded = true
            logger.debug("$status.file.path --> lmodded: $statusType")
        }
    } as ISVNStatusHandler, null)
    lmodded
}

The code I have for this is in groovy but hopefully the use of the svnkit api is obvious enough to work with. SvnConfig is just a local value object containing various details about the repository itself.

Opuntia answered 7/8, 2012 at 18:43 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.