기억의 습작

SVN 변경된 소스만 추출하기 본문

SCM (형상관리)/svn

SVN 변경된 소스만 추출하기

뿌사리다 2023. 1. 12. 13:08

svn 특정 리비전 사이에 있는 변경된 소스 파일 추출 (java and class)

변경된 파일(java) and class 추출

#!/bin/bash

#./extract.sh 5 8
#------------------------------------------------------

VER1=$1
VER2=$2
WAS="was"
SOURCE_FOLDER="/sw/inzi/scm/source/imageServerSource"
DIFF="diff"
OLD_PWD=$PWD



if [ "${VER2}" == "" ]
then
  echo ""
  echo " 2개의 파라미터가 필요합니다."
  echo " 1 parameter: 변경된 소스를 반영하기 위한 svn repository 번호 시작점"
  echo " 2 parameter: 변경된 소스를 반영하기 위한 svn repository 번호 끝점"
  echo " ex) ./extract.sh 5 8"
  echo ""
  exit 0
fi

# 최신소스 업데이트 & 컴파일
cd $SOURCE_FOLDER
svn update
ant clean
ant


# 변경된 소스 착출
mkdir $DIFF
svn diff -r$VER1:$VER2 --summarize | awk '{print $NF}' | xargs -i cp {} $DIFF --parents


# 컴파일된 class파일을 was배포 tree구조에 맞게 배치
cd $OLD_PWD
java FileReplase $SOURCE_FOLDER/diff/src/main/java $SOURCE_FOLDER/build/WEB-INF/classes


# WAS 배포에 맞도록 폴더 재배치.
cd $SOURCE_FOLDER
rm -rf $WAS
mkdir -p $WAS/WEB-INF/classes
mkdir -p $WAS/WEB-INF/lib
cp -R $DIFF/src/main/java/*               $WAS/WEB-INF/classes
cp -R $DIFF/src/main/resources/*          $WAS/WEB-INF/classes
cp -R $DIFF/src/main/webapp/WEB-INF/lib   $WAS/WEB-INF


# 임시로 사용한 디렉토리 제거
rm -rf $DIFF

# compress & make dest file
TAR_FILE=edd_$(date "+%Y%m%d_%H%M%S").tar
tar -cvf $TAR_FILE was
rm -rf was
mv $TAR_FILE ../sourceBuild/extractBuildFiles


# print log version info.
cd $OLD_PWD
echo -e "DATE=$(date "+%Y-%m-%d_%H:%M:%S") , ver: $VER2" >> app.log

echo ""
echo "complete.."

java 파일의 패스를 찾아 class만 추려내기. (이 자바 파일은 컴파일 후 사용해야 함)

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

// create by ppusari. 
// date: 2021-06-09
public class FileReplase {

    public static void main(String[] args) {        
        String srcJavaFile;
        String classFile;

        if (args.length == 2) {
            srcJavaFile = args[0];
            classFile = args[1];
        }
        else {
            srcJavaFile = System.getProperty("user.dir") + "/diff/src/main/java";
            classFile = System.getProperty("user.dir") + "/build/WEB-INF/classes";
        }

        System.out.println("");
        System.out.println(" java path: " + srcJavaFile);
        System.out.println("class path: " + classFile);
        System.out.println("");

        FileReplase _this = new FileReplase();
        _this.subDirList(srcJavaFile, srcJavaFile, classFile);
    }

    public void subDirList(String source, String src, String dst){
        File dir = new File(source); 
        File[] fileList = dir.listFiles(); 
        try{
            for(int i = 0 ; i < fileList.length ; i++){
                File file = fileList[i]; 
                if(file.isFile() && file.getName().contains(".java")){

                    String path = file.getAbsolutePath();                    
                    String javaPath = path.substring(src.length(), (int)path.length());
                    String classPath =  dst + javaPath.substring(0, javaPath.length()-4) + "class";                    
//                    System.out.println(path);
//                    System.out.println(classPath);

                    // class 파일 이동
                    String classFile = path.substring(0, path.length()-4) + "class";                    
                    Files.move(Paths.get(classPath), Paths.get(classFile));

                    // 파일 삭제
                    Files.delete(Paths.get(path));    

                }else if(file.isDirectory()){
                    // 서브디렉토리가 존재하면 재귀적 방법으로 다시 탐색
                    subDirList(file.getCanonicalPath().toString(),src, dst); 
                }
            }
        }catch(IOException e){
            System.out.println("file delete error: " + e.toString());
        }
    }

}

적용에 어려움을 격으셨다면 덧글을... 급하면 호출을.

728x90
반응형
LIST

'SCM (형상관리) > svn' 카테고리의 다른 글

SVN 오류코드 정리  (0) 2021.08.24
오프라인 환경에 SVN 설치하기  (0) 2021.08.24
SVN 명령어 (Ubuntu)  (0) 2021.08.24
SVN 명령어 (Windows)  (0) 2021.08.24