SVN:跟踪合并 [英] SVN: Track merges

查看:171
本文介绍了SVN:跟踪合并的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

200新X-45旗新新200新200新200新200新200新200新200新200新200新200新200新200新200新200新200新200新新200新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新作新新200新新200新新200新新200新新作我非常有趣的基于UI的解决方案( Eclipse 插件将会很棒)。

解决方案

感谢所有回答的人(特别感谢 derobert 吉姆T )。我使用svnkit 1.2.x编写自己的代码,这样做完全是我需要的。

  private static void showMergedRevision(String pFromUrl,String pToUrl)throws SVNException {
列表< String> folders = new ArrayList< String>();
folders.add(Folder1);
...

SVNRepositoryFactoryImpl.setup();

String name =user;
String password =password;

ISVNOptions options = SVNWCUtil.createDefaultOptions(true);

ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(name,password);

SVNClientManager ourClientManager = SVNClientManager.newInstance(options,authManager);

final Set< Long>新新200新新新新旗新新200新新旗新新旗200新新新新旗新新旗200新新新新旗新新旗新新款:
for(String folder:folders){
SVNURL svnFrom = SVNURL.parseURIDecoded(pFromUrl +/+ folder);
SVNURL svnTo = SVNURL.parseURIDecoded(pToUrl +/+文件夹);
ISVNLogEntryHandler mergedLogger = new ISVNLogEntryHandler(){
public void handleLogEntry(SVNLogEntry pParamSVNLogEntry)throws SVNException {
mergedRevision.add(pParamSVNLogEntry.getRevision());
}
};
ourClientManager.getDiffClient()。doGetLogMergedMergeInfo(svnTo,SVNRevision.HEAD,svnFrom,SVNRevision.HEAD,false,null,mergedLogger);
}

System.out.println(String.format(Tracking from ... [%s] to [%s],pFromUrl,pToUrl));
System.out.println(比较文件夹:+文件夹);

SVNURL svnUrlorg = SVNURL.parseURIDecoded(pFromUrl);
ISVNLogEntryHandler histroyLogger = new ISVNLogEntryHandler(){
public void handleLogEntry(SVNLogEntry pParamSVNLogEntry)throws SVNException {
if(pParamSVNLogEntry.getRevision()< 0){
//有时候-1 null null null值。跳过他们
return;
}
final boolean merged = mergedRevision.contains(pParamSVNLogEntry.getRevision());
System.out.println(String.format(%s%s:%s%s%s,合并?[+]:[ - ],
pParamSVNLogEntry.getRevision ),
pParamSVNLogEntry.getAuthor(),pParamSVNLogEntry.getDate(),
pParamSVNLogEntry.getMessage()));
}
};
ourClientManager.getLogClient()。doLog(svnUrlorg,null,SVNRevision.HEAD,SVNRevision.create(0),SVNRevision.HEAD,true,false,false,-1,null,histroyLogger);
}

输出将是:


[ - ] 7210:boa 03.07.2009

[ - ] 7211:boa 03.07.2009

[+] 7215:boa 03.07 .2009


[+]表示合并版本,[ - ] - 未加注。


Is it possible in SVN 1.6 to track where a commit was merged. I'm especially interesting in UI based solution (Eclipse plugin will be great).

解决方案

Thank you for all answered person (special thanks to derobert and Jim T). I write my own code using svnkit 1.2.x that do what I exactly need.

private static void showMergedRevision(String pFromUrl, String pToUrl) throws SVNException {
    List<String> folders= new ArrayList<String>();
    folders.add("Folder1");
    ...

    SVNRepositoryFactoryImpl.setup();

     String name="user";
     String password="password";

     ISVNOptions options = SVNWCUtil.createDefaultOptions( true );

     ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(name, password);

     SVNClientManager ourClientManager = SVNClientManager.newInstance( options , authManager );

     final Set<Long> mergedRevision = new HashSet<Long>();        
     for(String folder : folders){
         SVNURL svnFrom = SVNURL.parseURIDecoded(pFromUrl + "/" + folder);
         SVNURL svnTo = SVNURL.parseURIDecoded(pToUrl+ "/" + folder);
         ISVNLogEntryHandler mergedLogger = new ISVNLogEntryHandler() {
            public void handleLogEntry(SVNLogEntry pParamSVNLogEntry) throws SVNException {
                mergedRevision.add(pParamSVNLogEntry.getRevision());
            }
        };
        ourClientManager.getDiffClient().doGetLogMergedMergeInfo(svnTo, SVNRevision.HEAD, svnFrom, SVNRevision.HEAD, false, null, mergedLogger);
     }

     System.out.println(String.format("Tracking merges from [%s] to [%s].", pFromUrl, pToUrl));
     System.out.println("Comparing folders: " + folders);

     SVNURL svnUrlorg = SVNURL.parseURIDecoded(pFromUrl);
     ISVNLogEntryHandler histroyLogger= new ISVNLogEntryHandler() {
        public void handleLogEntry(SVNLogEntry pParamSVNLogEntry) throws SVNException {
            if (pParamSVNLogEntry.getRevision() < 0){
                // Sometimes got -1 null null null values. Skip them
                return;
            }
            final boolean merged = mergedRevision.contains(pParamSVNLogEntry.getRevision());
            System.out.println(String.format("%s %s: %s %s %s", merged ? "[+]": "[-]", 
                    pParamSVNLogEntry.getRevision(), 
                    pParamSVNLogEntry.getAuthor(), pParamSVNLogEntry.getDate(), 
                    pParamSVNLogEntry.getMessage()));
        }
    }; 
    ourClientManager.getLogClient().doLog(svnUrlorg, null, SVNRevision.HEAD, SVNRevision.create(0), SVNRevision.HEAD, true, false, false, -1, null, histroyLogger);
}

The output will be:

[-] 7210: boa 03.07.2009
[-] 7211: boa 03.07.2009
[+] 7215: boa 03.07.2009

[+] means merged revision, [-] - unmerged.

这篇关于SVN:跟踪合并的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆