2014-11-29 3 views

답변

4

편집 :이 대답은 모든 hg 버전에서 작동합니다. 최신 hg 버전 (3.1 이상)의 경우보다 성능이 뛰어나고 간편한 answer을 참조하십시오.

예를 들어 단색 oneliner입니다.

수은이 hg log이고 파이프가 python 온리너로 파이프됩니다. hg 로그 template은 유효한 파이썬 리터럴을 출력하도록 구성됩니다. python oneliner는 이것을 JSON으로 변환합니다.

hg log --date ">2014-10-01" --no-merges --keyword "[email protected]" --keyword "[email protected]" --template "[\"{node|short}\",\"{author|user|urlescape}\",\"{date|rfc3339date}\",\"{desc|urlescape}\", [{files % '\"{file}\",'}]]\n" --user marinus --user develop | python -c "import sys,ast,json,urllib; x=[[z[0], urllib.unquote(z[1]).decode('utf8'), z[2], urllib.unquote(z[3]).decode('utf8'), z[4]] for z in [ast.literal_eval(y) for y in sys.stdin.readlines()]]; print(json.dumps(x,indent=2))" 

위의 예는 에 대한 유닉스이지만 호환성을 필요로하는 경우 당신은 단순히, ""에 대한 \"을 대체 할 수 있습니다. 형식이 지정되지 않은 JSON을 원한다면 'indent'를 None으로 설정하십시오.

파이썬 코드는 2/3 호환 (최신 버전)이며 외부 모듈을 사용하지 않습니다.

사용 된 HG 명령의 더 설명을 참조하십시오

hg help log 
hg help dates 
hg help templates 

파이썬 코드는 중첩 된 list comprehensions 사용, 더 많은 정보를 위해 구글.

11

Mercurial에는 JSON에 대한 지원 기능이 내장되어 있습니다. 당신은 단순히 사용하여 JSON 형식으로 로그 출력을 얻을 수 있습니다 :

hg log -Tjson 

필터는 평소와 같이 사용할 수 있고, 파일을 얻으려면, 당신은 '-v'(세부) 매개 변수를 추가 할 수 있습니다.

이것은 비교적 새로운 기능으로 (자세한 내용은 wiki 참조), 분명히 아직 문서화되지 않은 이유 일 수 있습니다. 이 같은 자신의 이름이 알려진 형식의 목록이 있습니까

hg log -Txml 
+1

을 :

이 사용하는 XML 출력을 얻을 수도 있어요? json 출력에 대해 몰랐습니다. –

+0

매우 유용합니다. 너무 나쁘다는 것은'hg help log'에 명확하게 설명되어 있지 않습니다. 우리의 AIX 버전에서는 2.8.1이 있고 xml과 json은 지원되지 않습니다. Windows 버전은 3.0.1입니다. xml은 작동하지만 json은 그렇지 않습니다. 이러한 한계 때문에 나는 다른 대답을 받아 들일 것이지만이 대답을 참조 할 것입니다. +1. –

+0

내가 이것을 알았 더라면 그것은 나에게 엄청난 일을 덜어 줬을 것이다! – user5886944

관련 문제