슬기로운 개발자생활/DevOps

파일 변경 트래커 (MacOS)

개발자 소신 2024. 1. 5. 08:18
반응형

테스트코드를 짜임새있게 작성했을 때 이점이 많이 있다. 특정 코드를 수정했을 때 문제가 될 수 있는 부분을 빠르게 확인할 수 있기 때문에 리팩토링이 원활하게 이루어진다.
pytest를 활용해서 테스팅을 진행할 때, 파일을 수정하고나서 저장한 뒤 직접 테스트 파일을 실행하는 것이 귀찮았다. 디렉토리 내 파일이 변경되는 것을 추적하고 자동으로 특정 명령어를 실행할 수 있도록 쉘 스크립트를 작성했다.

> FileTracker github

TDD (Test Driven Development)

테스트 주도 개발은 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성한다. 그런 후에, 그 테스트 케이스를 통과하기 위한 최소한의 코드를 생성한다. 마지막으로 작성한 코드를 표준에 맞도록 리팩토링한다. - 위키백과

순서

1.  fc.sh
2.  ignore
3.  참고자료

1. fc.sh

  • MacOS의 zsh을 사용하여 테스트하였다.
  • 실행명령어 > bash fc.sh
FOLDERLIST=$(python3 check_ignore.py)
LEDIT=$(stat -f %Z $FOLDERLIST)
while true
do
  FOLDERLIST=$(python3 check_ignore.py)
  CEDIT=$(stat -f %Z $FOLDERLIST)
  if [[ "$CEDIT" != "$LEDIT" ]]; then
    echo "===== RUN PYTHON COMMAND ====="
    python3 test.py
    LEDIT=$CEDIT
  fi
  sleep 0.5
done
  • FOLDERLIST에 변경을 추적할 파일목록을 담는다.
  • LEDIT은 해당 파일들의 마지막 수정일시를 체크하여 가지고있는다.
  • CEDIT에 현재 파일들의 수정일시를 저장하여 LEDIT과 비교
  • LEDIT과 CEDIT이 같지 않을경우는 파일이 변경되었을 때 뿐이니 echo 부터 LEDIT을 최신화하는 부분까지 실행

2. ignore

기본적으로 폴더 내 모든 파일을 추적하는데, gitignore처럼 venv폴더와 같은것은 변경을 추적하지 않기 위해서 check_ignore.py와 .ignore 두 파일을 생성해놓았다.

  • .ignore
    • 제외할 파일, 폴더 패턴 정의 ( * 사용 가능)
    • 폴더는 끝에 '/', '/*'로 끝나는 경우
    • default는 파일 패턴
  • check_ignore.py
    • 먼저 .ignore파일을 읽어 패턴을 확인한다. (파일 패턴, 폴더 패턴 구분)
      • 디렉토리 내 파일들 목록에서 폴더를 먼저 제외
      • 남아있는 파일 중 파일 패턴과 일치하면 제외
      • 남아있는것을 print하여 fc.sh에서 FOLDERLIST 변수에 담는다.
        ./test.py ./check_ignore.py ...

3. 참고자료

반응형