hg4j

hg 命令 http://blog.sina.com.cn/s/blog_53b7ddf00101jzrf.html

http://hg4j.com/

https://code.google.com/p/hg4j/source/checkout


import java.io.File;
import java.util.ArrayList;

import org.tmatesoft.hg.core.HgCheckoutCommand;
import org.tmatesoft.hg.core.HgCloneCommand;
import org.tmatesoft.hg.core.HgInitCommand;
import org.tmatesoft.hg.core.HgPullCommand;
import org.tmatesoft.hg.core.HgPushCommand;
import org.tmatesoft.hg.internal.FileUtils;
import org.tmatesoft.hg.internal.RepoInitializer;
import org.tmatesoft.hg.repo.HgLookup;
import org.tmatesoft.hg.repo.HgRemoteRepository;
import org.tmatesoft.hg.repo.HgRepository;

import com.srvctmpl.util.DataBaseException;


public class HgHandler {

    private String hgUri = "";
    private static File destLoc = null;
    private HgRemoteRepository hgRemote = null;
    private static HgRepository dstRepo = null;
    private static HgLookup lookup = new HgLookup();

    public HgHandler(String hgUri, String destDir) {
        this.hgUri = hgUri;
        this.destLoc = new File(destDir);
    }

    // 初始化 .hg 仓库
    public HgRepository repositoryInit() {
        try {

            if (destLoc.exists()) {
                FileUtils.rmdir(destLoc);
            }
            
            File parentDir = new File(destLoc.getParent());
            new HgInitCommand().location(parentDir).revlogV1().dotencode(false).fncache(false).execute();
            new RepoInitializer().initRequiresFromFile(new File(parentDir, ".hg")).getRequires();
            
            hgRemote = lookup.detectRemote(hgUri, null);
            dstRepo = lookup.detect(destLoc);
            HgCloneCommand cmd = new HgCloneCommand();
            return cmd.source(hgRemote).destination(destLoc).execute();
            
        } catch (Exception e) {
            throw new DataBaseException("hg init Repository 错误", e.getCause());
        }
    }

    //  hg pull ,返回pull的资源数目
    public int hgPull() {
        try {
            hgRemote = lookup.detectRemote(hgUri, null);
            dstRepo = lookup.detect(destLoc);
            HgPullCommand cmd = new HgPullCommand(dstRepo);
            cmd.source(hgRemote).execute();
            // new HgIncomingCommand(dstRepo).against(hgRemote).executeLite();
            return cmd.getPulledRevisions().size();
        } catch (Exception e) {
            throw new DataBaseException("hg Pull错误", e.getCause());
        }
    }

    // hg update ,返回 update资源的数目
    public int hgUpdate() {
        try {
            dstRepo = lookup.detect(destLoc);
            new HgCheckoutCommand(dstRepo).clean(true).execute();
            return destLoc.listFiles().length;
        } catch (Exception e) {
            throw new DataBaseException("hg Update错误", e.getCause());
        }
    }

    // hg clone  ,返回 更新数目
    public int hgClone() {
        HgRepository repository = repositoryInit();
        if (!repository.isInvalid()) {
            hgPull();
            return hgUpdate();
        } else {
            throw new DataBaseException("hg Clone 本地创建仓库无效");
        }

    }

    // hg commit -m “head信息” 。 当成功执行 返回1
    //true outCome is OK, commit well,outCome no to add is not file to commiit,others are file
    public int hgCommit() {
        try {
            /*
            dstRepo = lookup.detect(destLoc);
            HgCommitCommand cmd = new HgCommitCommand(dstRepo).message("files update");
            return cmd.execute();
            */
            hgRemote = lookup.detectRemote(hgUri, null);
            ArrayList<String> cmd = new ArrayList<String>();
            cmd.add("hg");
            cmd.add("commit");
            cmd.add("--addremove");
            cmd.add("-m");
            cmd.add(hgRemote.heads().toString());
            ExecHelper eh = new ExecHelper(new OutputParser.Stub(), destLoc);
            eh.run(cmd);
            return eh.getExitValue();
        } catch (Exception e) {
            throw new DataBaseException("hg Commit错误", e.getCause());
        } 
        
        
    }
    

    // hg push,返回 push结果的数目
    public int hgPush() {
        try {
            hgRemote = lookup.detectRemote(hgUri, null);
            dstRepo = lookup.detect(destLoc);
            HgPushCommand cmd = new HgPushCommand(dstRepo);
            cmd.destination(hgRemote).execute();
            return cmd.getPushedRevisions().size();
        } catch (Exception e) {
            throw new DataBaseException("hg Push错误", e.getCause());
        }
    }
}





你可能感兴趣的:(hg4j)