일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- docker oracle12c
- svn
- WH question
- taskkill
- svn dump
- 프로젝트 네임변경 후 이클립스 로딩시 에러
- Oracle install
- svn update
- postgres install
- svn 변경된 파일 추출
- Store password unencrypted
- Cannot prepare internal mirrorlist: No URLs in mirrorlist
- expected at least 1 bean which qualifies as autowire candidate
- svn commit
- docker 폐쇄망
- svn 특정 리비전 사이 추출
- apt-get update 오류
- grep
- ant
- javax.servlet.GenericFilter
- 포스트그레스 설치
- svn log
- Failed to download metadata for repo 'appstream'
- svn load
- mysql dml
- VirtualBox
- Remmina
- xrdp
- NEXUS
- svn 사용법
Archives
- Today
- Total
기억의 습작
SVN 변경된 소스만 추출하기 본문
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 |