获取与文件修订版相关的日期和描述 - Java API Perforce

时间:2012-07-10 11:37:39

标签: java api perforce java-api

我正在尝试编写一个方法,该方法将文件路径和修订号作为参数,并返回与修订相关联的日期。我所使用的代码(尽管速度很慢)但是,当我将修订号大于51时,输出会搞砸.. Here is the API.

输入

String [] filePaths= {"//file/x/y/strings/somefile.csv"};
p4Client.getDateAssociatedWithFileRevision(filePaths, 52);

输出 - 这应该只是一行...

Rev number: 2 :: Revision Date: Wed Aug 24 23:48:42 BST 2005

Rev number: 52 :: Revision Date: Wed Aug 24 23:52:53 BST 2005

Rev number: 51 :: Revision Date: Sat Aug 20 02:01:59 BST 2005

getDateAssociatedWithFileRevision

public Date getDateAssociatedWithFileRevision(String [] filePath, int revisionNumber) {

        List<IFileSpec> fileList = null;
        Map<IFileSpec,List<IFileRevisionData>> fileRevisionData = null;
        String currentFile = null;
        Date revisionDate = null;

        try 
        {
            String file = filePath[0] + "#" + revisionNumber;
            currentFile = file;
            fileList = getIFileSpecList(file);  //Get list of file(s) in path

            for(IFileSpec fileSpec: fileList)
            {
                if(file.toString() == null)
                {
                    System.out.println("\"" + currentFile +"\"" + " does not exist...");
                    break;
                }
                fileRevisionData = fileSpec.getRevisionHistory(0, true,false,true,false);
                int i = 0;
                for(List<IFileRevisionData> revisionData : fileRevisionData.values()) {
                    revisionDate = revisionData.get(0).getDate();
                    int revision = revisionData.get(0).getRevision();
                    System.out.println("Rev number: " +revision +" :: " + "Revision Date: " + revisionDate);
                    System.out.println(i);
                    i++;
                }

            }
        }
        catch(Exception e){e.printStackTrace();}
        return revisionDate;  
     }

GetIFileSpecList

public List<IFileSpec> getIFileSpecList(String file) {
        List<IFileSpec> fileList = null;
        try {
            fileList = iServer.getDepotFiles(
                        FileSpecBuilder.makeFileSpecList(new String[] {file}), false);  //Get list of file(s) in path
        }
        catch(Exception e){e.printStackTrace();}
        return fileList;
     }

修改

刚想通过集成后输出搞砸了,只需要找到一种方法来处理它们。

2 个答案:

答案 0 :(得分:2)

工作太多了。采用这种命令行思路(“p4文件将获取该信息,解析”)并使Perforce为您执行数据连接。然后Java-ize它。

% p4 -Ztag files //guest/jeff_bowles/scripts/0228devbranch.html
... depotFile //guest/jeff_bowles/scripts/0228devbranch.html
... rev 2
... change 4421
... action edit
... type ktext
... time 1093044566

% p4 -Ztag files //guest/jeff_bowles/scripts/0228devbranch.html#1
... depotFile //guest/jeff_bowles/scripts/0228devbranch.html
... rev 1
... change 4420
... action add
... type ktext
... time 1093042787

答案 1 :(得分:1)

我设法通过添加if语句(下面标记)仅返回我想要的日期。我不知道这个解决方案有多优雅......欢迎任何评论。

<强> getDateAssociatedWithFileRevision

public Date getDateAssociatedWithFileRevision(String [] filePath, int revisionNumber) {

        List<IFileSpec> fileList = null;
        Map<IFileSpec,List<IFileRevisionData>> fileRevisionData = null;
        String currentFile = null;
        Date revisionDate = null;

        try 
        {
            String file = filePath[0] + "#" + revisionNumber;
            currentFile = file;
            fileList = getIFileSpecList(file);  //Get list of file(s) in path

            for(IFileSpec fileSpec: fileList)
            {
                if(file.toString() == null)
                {
                    System.out.println("\"" + currentFile +"\"" + " does not exist...");
                    break;
                }
                fileRevisionData = fileSpec.getRevisionHistory(0, true,false,true,false);
                for(List<IFileRevisionData> revisionData : fileRevisionData.values()) {
                    int revision = revisionData.get(0).getRevision();
     -------------> if(revision.equals(revisionNumber))
                    {
                        revisionDate = revisionData.get(0).getDate();

                        System.out.println("Rev number: " +revision +" :: " + "Revision Date: " + revisionDate);
                        break;

                    }
                }

            }
        }
        catch(Exception e){e.printStackTrace();}
        return revisionDate;  
     }