Mercurial은 파일들의 세트를 지정할 수 있도록 함수형 언어를 지원한다.

파일명 패턴 지정처럼 파일셋 지정도 set: 라는 prefix로 시작된다.

SQL처럼 조건들을 논리연산으로 이어붙일 수 있고 그룹핑도 가능하다.


아래는 일련의 예제



# working directory의 바이너리 파일의 status 출력
hg status -A "set:binary()"

# .hgignore에 등록되어 있으나 tracking되고 있는 파일들 forget
hg forget "set:hgignore() and not ignored()"

# 'magic'이란 단어를 포함하고 있는 텍스트 파일경로 출력
hg locate "set:grep(magic) and not binary()"

# UTF-8 인코딩이 아닌 모든 .c 파일 리스트 출력
hg locate "set:**.c and not encoding('UTF-8')"

# 1M 이상의 바이너리 파일의 복제본 revert
hg revert "set:copied() and binary() and size('>1M')"

# remove.txt 에 지정된 파일리스트 중 a 나 b 라는 글자를 포함하고 있는 파일 삭제
hg remove "set: 'listfile:remove.txt' and (**a* or **b*)"



마지막 예제에서 확인할 수 있듯이 파일명 패턴 지정과 함께 사용도 가능함.




아래는 파일셋 지정에서 사용할 수 있는 함수형 언어



# 단일논리연산
not x # x라는 조건이 아닌 파일들. !x 라고 표현도 가능


# 논리연산
x and y # x와 y의 교집합에 해당하는 파일들. x & y 라고 표현도 가능
x or y  # x와 y의 합집합에 해당하는 파일들. x | y 또는 x + y 라고 표현도 가능
x - y   # x에는 포함되지만 y에는 포함되지 않는 파일들. 


# 함수형 언어
added() # status가 added 인 것
binary() # 바이너리 파일
clean() # statuc가 clean인 것
copied() # 복사본
deleted() # status가 deleted인 것
encoding(name) # name에 지정된 인코딩으로 성공적 디코딩이 되는 것. ASCII나 UTF-8 외에는 적당하지 않음
eol(style) # style에 지정된 newlines을 가진 것. (style은 dos/unix/mac) 바이너리 파일은 예외처리
exec() # 실행가능한 파일들
grep(regex) # 내용 중 지정한 정규식에 맞는 내용을 가진 파일들
hgignore() # .hgignore에 지정한 패턴에 일치하는 파일들
ignored() # status가 ignored인 것
modified() # status가 modifed인 것
removed() # status가 removed인 것
resolved() # status가 resolved인 것
size(expression) # expression에 해당되는 파일사이즈를 가진 파일들
# 아래는 expression 예제
1k (1024~2047 바이트)
< 20k (20480 바이트 미만)
>= .5MB (524288 바이트 이상)
4k - 1MB (4096 ~ 1048576 바이트)
subrepo([pattern]) # pattern에 매칭되는 sub-repositories
symlink() # 심볼릭 링크 파일
unknown() # status가 unknown 상태인 파일
unresolved() # resolve 상태가 unresolved인 파일








Posted by bloodguy
,