チェンジセット 14

差分発生行の前後
無視リスト:
コミット日時:
2007/09/03 20:54:03 (14 年前)
コミッタ:
shinomiya
ログメッセージ:

SVNのexportタスクを追加

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • trunk/im-svn-diff-exporter/src/main/config/build.xml

    r10 r14  
    55                <property name="decompressed_dir" value="PLEASE SET DECOMPRESSED DIR PATH" /> 
    66                 
    7                 <property name="exporter_root" value="${decompressed_dir}/im-svn-diff-exporter-0.1.0" /> 
    8                 <property name="maven2_root"   value="${decompressed_dir}/maven2" /> 
     7                <property name="svn_diff_exporter_jar" value="${decompressed_dir}/lib/im-svn-diff-exporter-0.1.0.jar" /> 
     8                <property name="svnkit_jar"            value="${decompressed_dir}/maven2/org/tmatesoft/svnkit/1.1.2/svnkit-1.1.2.jar" /> 
     9        </target> 
    910 
    10                 <property name="svn_diff_exporter_jar" value="${exporter_root}/lib/im-svn-diff-exporter-0.1.0.jar" /> 
    11                 <property name="svnkit_jar"            value="${maven2_root}/org/tmatesoft/svnkit/1.1.2/svnkit-1.1.2.jar" /> 
     11        <target name="export" depends="init"> 
     12                 
     13                <taskdef name      = "export" 
     14                                 classname = "org.intra_mart.svn.util.ExportTask" 
     15                                 classpath = "${svn_diff_exporter_jar};${svnkit_jar}" /> 
     16 
     17                <export 
     18                        user     = "guest" 
     19                        password = "" 
     20                        url      = "http://oss.intra-mart.org/projects/im-tools/svn/trunk/im-svn-diff-exporter" 
     21                        revision = "HEAD" 
     22                        destDir  = "C:/temp/exportTemp" /> 
     23 
    1224        </target> 
     25 
    1326 
    1427        <target name="diffExport" depends="init"> 
  • trunk/im-svn-diff-exporter/src/main/java/org/intra_mart/svn/util/DiffExporter.java

    r13 r14  
    1010import java.io.IOException; 
    1111import java.io.InputStreamReader; 
     12import java.io.OutputStream; 
    1213import java.text.SimpleDateFormat; 
    1314import java.util.Collection; 
     
    1516import java.util.Map; 
    1617 
     18import org.tmatesoft.svn.core.SVNCommitInfo; 
    1719import org.tmatesoft.svn.core.SVNDirEntry; 
    1820import org.tmatesoft.svn.core.SVNErrorCode; 
     
    2123import org.tmatesoft.svn.core.SVNLogEntry; 
    2224import org.tmatesoft.svn.core.SVNLogEntryPath; 
     25import org.tmatesoft.svn.core.SVNNodeKind; 
    2326import org.tmatesoft.svn.core.SVNURL; 
    2427import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager; 
    2528import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory; 
     29import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory; 
    2630import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl; 
     31import org.tmatesoft.svn.core.io.ISVNEditor; 
     32import org.tmatesoft.svn.core.io.ISVNReporter; 
     33import org.tmatesoft.svn.core.io.ISVNReporterBaton; 
    2734import org.tmatesoft.svn.core.io.SVNRepository; 
    2835import org.tmatesoft.svn.core.io.SVNRepositoryFactory; 
     36import org.tmatesoft.svn.core.io.diff.SVNDeltaProcessor; 
     37import org.tmatesoft.svn.core.io.diff.SVNDiffWindow; 
    2938import org.tmatesoft.svn.core.wc.ISVNOptions; 
    3039import org.tmatesoft.svn.core.wc.SVNClientManager; 
     
    6574                expoter.initialize(user, password); 
    6675 
    67                 // Diff 開始 
    68                 expoter.doDiff(SVNURL.parseURIEncoded(urlFrom), 
    69                                            DiffExporter.convertRevision(revisionFrom), 
    70                                            SVNURL.parseURIEncoded(urlTo), 
    71                                            DiffExporter.convertRevision(revisionTo), 
    72                                            recursive, 
    73                                            diffFile); 
    74  
    75                 // Export開始(Diffファイルに則って) 
    76                 expoter.doExportBasedOnDiff(SVNURL.parseURIEncoded(urlTo), 
    77                                                                         DiffExporter.convertRevision(revisionTo), 
    78                                                                         destDir, 
    79                                                                         diffFile); 
    80                  
    81                 // 指定されたDiffファイルを元に、ファイルパス、および、作成者をファイルに出力 
    82                 expoter.extractFilePathAndAuthorBasedOnDiff( 
    83                                                         SVNURL.parseURIEncoded(urlTo), 
    84                                                         DiffExporter.convertRevision(revisionTo), 
    85                                                         diffFile, 
    86                                                         resultFile); 
     76//              // Export 開始 
     77//              expoter.doExport(SVNRepositoryFactory.create(SVNURL.parseURIEncoded(urlTo)), 
     78//                                               "", 
     79//                                               DiffExporter.convertRevision(revisionTo), 
     80//                                               destDir); 
     81// 
     82//              // Diff 開始 
     83//              expoter.doDiff(SVNURL.parseURIEncoded(urlFrom), 
     84//                                         DiffExporter.convertRevision(revisionFrom), 
     85//                                         SVNURL.parseURIEncoded(urlTo), 
     86//                                         DiffExporter.convertRevision(revisionTo), 
     87//                                         recursive, 
     88//                                         diffFile); 
     89// 
     90//              // Export開始(Diffファイルに則って) 
     91//              expoter.doExportBasedOnDiff(SVNURL.parseURIEncoded(urlTo), 
     92//                                                                      DiffExporter.convertRevision(revisionTo), 
     93//                                                                      destDir, 
     94//                                                                      diffFile); 
     95//               
     96//              // 指定されたDiffファイルを元に、ファイルパス、および、作成者をファイルに出力 
     97//              expoter.extractFilePathAndAuthorBasedOnDiff( 
     98//                                                      SVNURL.parseURIEncoded(urlTo), 
     99//                                                      DiffExporter.convertRevision(revisionTo), 
     100//                                                      diffFile, 
     101//                                                      resultFile); 
     102 
    87103        } 
    88104 
     
    106122        SVNRepositoryFactoryImpl.setup(); 
    107123 
     124        // For using over file:/// 
     125        FSRepositoryFactory.setup(); 
     126         
    108127                // クライアントマネージャ生成 
    109128                ISVNOptions options = SVNWCUtil.createDefaultOptions(true); 
     
    114133        } 
    115134         
    116  
     135        /** 
     136         * @param url 
     137         * @param filePath 
     138         * @param revision 
     139         * @param destDir 
     140         * @throws SVNException 
     141         * @throws IOException 
     142         */ 
     143        public void doExport(SVNRepository repository, 
     144                                                 String filePath, 
     145                                                 SVNRevision revision, 
     146                                                 String destDir) 
     147                                        throws SVNException, IOException { 
     148 
     149                if(this.authManager == null){ 
     150                        throw new IllegalStateException("Not yet initialized"); 
     151                } 
     152                 
     153                repository.setAuthenticationManager(authManager); 
     154                 
     155                long revisionNumber = revision.getNumber(); 
     156 
     157                // ノードタイプ取得 
     158                SVNNodeKind nodeKind = repository.checkPath(filePath, revisionNumber); 
     159 
     160                // ファイルの場合 
     161                if (nodeKind == SVNNodeKind.FILE) { 
     162                        SVNDirEntry entry = repository.info(filePath, revisionNumber); 
     163                         
     164                        File targetFile = null; 
     165                        if(filePath != null && filePath.length() != 0){ 
     166                                targetFile = new File(destDir, filePath); 
     167                                System.out.println(destDir + "/" + filePath); 
     168                        } 
     169                        else{ 
     170                                targetFile = new File(destDir, entry.getRelativePath()); 
     171                                System.out.println(destDir + "/" + entry.getRelativePath()); 
     172                        } 
     173                                 
     174                        targetFile.getParentFile().mkdirs(); 
     175                         
     176                        FileOutputStream fos = new FileOutputStream(targetFile); 
     177                        BufferedOutputStream exportStream = new BufferedOutputStream(fos); 
     178                         
     179                        repository.getFile(filePath, revisionNumber, null, exportStream); 
     180                         
     181                        exportStream.close(); 
     182                } 
     183                // ディレクトリの場合 
     184                else if (nodeKind == SVNNodeKind.DIR){ 
     185 
     186                    Collection entries = repository.getDir(filePath, revisionNumber, null, (Collection) null); 
     187                    Iterator iterator = entries.iterator(); 
     188                while (iterator.hasNext()) { 
     189                    SVNDirEntry entry = (SVNDirEntry) iterator.next(); 
     190                     
     191                                String childPath = (filePath != null && filePath.length() != 0) ? 
     192                                                                                filePath + "/" + entry.getRelativePath() : 
     193                                                                                        entry.getRelativePath(); 
     194 
     195                                // 再帰 
     196                        this.doExport(repository, 
     197                                         childPath, 
     198                                                 revision, 
     199                                                 destDir); 
     200                } 
     201                } 
     202                // そのほかは、エラー扱い 
     203                else{ 
     204                        String url = repository.getLocation().getURIEncodedPath() + filePath; 
     205                        SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.UNKNOWN, "No entry at URL ''{0}''", url); 
     206                        throw new SVNException(err); 
     207                } 
     208                 
     209        } 
     210         
    117211        /** 
    118212         * Diffファイルを生成します。 
     
    480574                } 
    481575        } 
    482          
     576 
    483577}