2

ファイル パスとリビジョン番号を引数として取り、リビジョンが関連付けられている日付を返すメソッドを作成しようとしています。私が持っているコードは (かなりゆっくりですが) 動作しますが、51 を超えるリビジョン番号を入力すると、出力がめちゃくちゃになります.ここに API があります。

入力

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

出力 - これは 1 行である必要があります...

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;
     }

編集

統合後に出力が台無しになっていることがわかりました。今すぐそれらを処理する方法を見つける必要があります..

4

2 に答える 2

2

働き過ぎ。このコマンドラインのアイデア (「p4 ファイルはその情報を解析して取得します」) を使用して、Perforce にデータの結合を行わせます。それをJava化します。

% 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
于 2012-07-12T14:28:50.493 に答える
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;  
     }
于 2012-07-10T16:24:28.013 に答える