Mercurial > hg4j
view src/org/tmatesoft/hg/core/HgOutgoingCommand.java @ 193:37f3d4a596e4
Use common low to hi-level changeset api transformer
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 15 Apr 2011 03:28:12 +0200 |
parents | e5407b5a586a |
children | 344e8d7e4d6e |
line wrap: on
line source
/* * Copyright (c) 2011 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 * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * For information on how to redistribute this software under * the terms of a license other than GNU General Public License * contact TMate Software at support@hg4j.com */ package org.tmatesoft.hg.core; import java.util.List; import org.tmatesoft.hg.internal.RepositoryComparator; import org.tmatesoft.hg.repo.HgChangelog; import org.tmatesoft.hg.repo.HgRemoteRepository; import org.tmatesoft.hg.repo.HgRepository; import org.tmatesoft.hg.util.CancelledException; /** * Command to find out changes made in a local repository and missing at remote repository. * * @author Artem Tikhomirov * @author TMate Software Ltd. */ public class HgOutgoingCommand { private final HgRepository localRepo; private HgRemoteRepository remoteRepo; private boolean includeSubrepo; private RepositoryComparator comparator; public HgOutgoingCommand(HgRepository hgRepo) { localRepo = hgRepo; } /** * @param hgRemote remoteRepository to compare against * @return <code>this</code> for convenience */ public HgOutgoingCommand against(HgRemoteRepository hgRemote) { remoteRepo = hgRemote; comparator = null; return this; } /** * PLACEHOLDER, NOT IMPLEMENTED YET. * * Select specific branch to pull * @return <code>this</code> for convenience */ public HgOutgoingCommand branch(String branch) { throw HgRepository.notImplemented(); } /** * PLACEHOLDER, NOT IMPLEMENTED YET. * * @return <code>this</code> for convenience */ public HgOutgoingCommand subrepo(boolean include) { includeSubrepo = include; throw HgRepository.notImplemented(); } /** * Lightweight check for outgoing changes. * * @param context * @return list on local nodes known to be missing at remote server */ public List<Nodeid> executeLite(Object context) throws HgException, CancelledException { return getComparator(context).getLocalOnlyRevisions(); } /** * Complete information about outgoing changes * * @param handler delegate to process changes */ public void executeFull(final HgLogCommand.Handler handler) throws HgException, CancelledException { if (handler == null) { throw new IllegalArgumentException("Delegate can't be null"); } getComparator(handler).visitLocalOnlyRevisions(new ChangesetTransformer(localRepo, handler)); } private RepositoryComparator getComparator(Object context) throws HgException, CancelledException { if (remoteRepo == null) { throw new IllegalArgumentException("Shall specify remote repository to compare against"); } if (comparator == null) { HgChangelog.ParentWalker pw = localRepo.getChangelog().new ParentWalker(); pw.init(); comparator = new RepositoryComparator(pw, remoteRepo); comparator.compare(context); } return comparator; } }