[Git] Line ending character 관련 설정

git을 윈도우즈에서 쓸 때의 꽤 짜증나는 점은 줄바꿈 문자(CR/LF vs LF-윈도우즈에서는 CR,LF를 쓰고, Unix계열에서는 LF만 쓴다)이다.

CR,LF 문자가 바뀌면 git에서는 그냥 소스 파일 전체를 다른 파일로 여기기 때문에, 크로스 플랫폼 환경에선 매우 짜증난다. 그래서 이를 해결하기 위한 옵션이 있는데, core.autocrlf 옵션이다.

autocrlf 옵션은 세가지 값을 가질 수 있다.

1. true: “git config –global core.autocrlf true”

commit할 때 CR,LF -> LF, check out할 때 LF -> CR,LF.

2. input: “git config –global core.autocrlf input”

commit할 때만 CR,LF -> LF.

3. false: “git config –global core.autocrlf false”

그냥 그대로 쓴다. 저장소에도 CR이 저장된다.

또한, patch를 이용하는 경우에도 CR,LF와 LF 문제로 걸리적 거릴 때가 많다.

가령, format-patch를 만들면, patch 파일은 LF를 사용하게 되는데, 이걸 am으로 적용할 때도 제대로 작동하지 않는다. 같은 곳에서 그냥 연달아 format-patch HEAD^ -> reset HEAD^ -> am 0001-blah.patch를 했을 때조차 적용되지 않는 걸 보면 그냥 아주 돌아버린다.

도움을 주기 위한 옵션은 git am의 –keep-cr 이다.

참고: https://git-scm.com/book/ko/v1/Git%EB%A7%9E%EC%B6%A4-Git-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

[Windows] BAT 파일에서 현재 시간,날짜 만들기

Stackoverflow에 외국에 맞는게 올라가 있다.

Locale 설정에 따라 달라져야 한다. 맞게 바꾸면.

set hour=%time:~0,2%

if “%hour:~0,1%” == ” ” set hour=0%hour:~1,1%

echo hour=%hour%

set min=%time:~3,2%

if “%min:~0,1%” == ” ” set min=0%min:~1,1%

echo min=%min%

set secs=%time:~6,2%

if “%secs:~0,1%” == ” ” set secs=0%secs:~1,1%

echo secs=%secs%

set year=%date:~0,4%

echo year=%year%

set month=%date:~5,2%

if “%month:~0,1%” == ” ” set month=0%month:~1,1%

echo month=%month%

set day=%date:~8,2%

if “%day:~0,1%” == ” ” set day=0%day:~1,1%

echo day=%day%

set datetimef=%year%%month%%day%_%hour%%min%%secs%

참고: http://stackoverflow.com/questions/1192476/format-date-and-time-in-a-windows-batch-script

git p4 Windows에서 쓰기

아. git-p4를 내가 다시 쓸 일이 생기다니.. OTL

Perforce는 (거지같게도) patch 파일이나 diff 파일 만드는 기능이 빈약해서 git p4 clone 해서 patch 파일을 만들어 사용하면 편하다.

사실 별로 해줄 건 없고,

Git for Windows 깔고,

p4 깔고,

git-p4.py 만 https://raw.github.com/git/git/master/git-p4.py 에서 받아다가 “C:\Program Files (x86)\Git\bin\” 아래에 넣어주면 된다.

git-p4.py 치는 거보다 git p4 로 쓰고 싶으면 “%USERPROFILE%.gitconfig” 를 아래와 같이 고쳐서 alias해주면 된다.

[alias]

p4 = !’C:\\Program Files (x86)\\Git\\bin\\git-p4.py’

기본 config variable은 다음과 같다.

git-p4.user

User specified as an option to all p4 commands, with -u
<user>
. The environment variable P4USER can be used instead.

git-p4.password

Password specified as an option to all p4 commands, with -P
<password>
. The environment variable P4PASS can be used
instead.

git-p4.port

Port specified as an option to all p4 commands, with -p
<port>
. The environment variable P4PORT can be used instead.

git-p4.host

Host specified as an option to all p4 commands, with -h
<host>
. The environment variable P4HOST can be used instead.

git-p4.client

Client specified as an option to all p4 commands, with -c
<client>
, including the client spec. 

참고: http://ericlathrop.com/2012/12/how-to-set-up-git-p4-in-windows/


[Linux:Kernel] string 처리 개선

String copying

ssize_t strscpy(char *dest, const char *src, size_t count);

ssize_t strscpy_truncate(char *dest, const char *src, size_t count);

strscpy()는 src에서 dest로 최대 count bytes를 copy한다. source string이 count bytes보다 긴 경우를 제외하고는 copy된 bytes 수를 리턴한다. 긴 경우는 -E2BIG을 리턴한다. 다른 차이는 overflow 나는 경우는 src를 truncate하는게 아니라 dest가 empty string이 된다. 에러 체크를 항상 하면 괜찮은데, 안하는 경우, truncate된 string이 문제를 일으키는 일이 많기 때문에 이렇게 동작한다고 한다.

truncate된 string이 필요한 경우는 아래 버전을 사용하면 된다. 리턴 값은 같지만, null-terminate된 truncate된 string이 dest에 들어간다.

Integer parsing

simple_strto*() 함수가 많이 사용되지만, checkpatch가 불평하듯, kstrto*()가 더 낫다. 그런데, simple_strto*()는 “123abc”와 같은 string을 123으로 변환하는데, 이게 편리한 경우도 있다. 그래서 새로운 함수가 제안되었다.

int parse_integer(const char *s, unsigned int base, <type> *val);

사실, parse_integer()는 함수가 아니라 val의 타입에 맞는 여러가지 매크로이다. val이 unsigned short라면, 디코딩은 unsigned를 기초로 하고, 결과값이 short의 범위를 벗어나지 않는지 확인된다.

최종 결과는 val안에 담기고, 디코딩된 char 수가 리턴된다. 전체 string이 decode됐는지는 s[return_value] 가 null byte인지를 체크하면 된다. null-terminate string이면 원래 s[strlen(s)]는 ‘\0’일 테니까. 아니라면, 그 곳에 parsing하는 string이 계속 있을 거다. base가 문서화되지 않은 값 PARSE_INTEGER_NEWLINE과 or되면, 맨 마지막의 newline character는 무시-sysfs file로의 input을 parsing할 때 유용하다-된다. 아무 character도 convert되지 않으면, -EINVAL을 리턴한다. overflow인 경우 -ERANGE를 리턴한다.

출처: Improving kernel string handling(http://lwn.net/Articles/643376/)

KVM 스위치 ATEN CS692 사용법

HDMI/USB/Keyboard/Audio 를 두개 연결해서 전환할 수 있는 KVM 스위치 ATEN CS692를 퇴사한 동료가 쓰던 것을 물려받아(?) 쓰고 있는데,

이상하게 특정 마우스만 꽂으면 이상하게 튀고, 웨이브 모양을 그리며 움직이는 거다;; 상하로 움직이는데 좌우로 움직이고 막… 다른 마우스 꽂으면 잘 되고.. -_-;;

그래서 접지나 호환성 문제가 있나 하고 넘어갔다가, 오늘 매뉴얼을 찾아 읽어보니 Mouse Emulation mode가 켜져 있으면 그렇더라. 끄니까 잘된다.

KVM에 핫키 설정이 있었다는 사실을 모르고, 스위치로만 눌렀더니…

어쩐지 컨트롤키랑 여러개 막 치다보면 키보드 램프가 돌아가며 깜박깜박하고, 어떨 땐 막 제멋대로 화면 전환이 되더라니… 램프 깜박거릴 때 ESC 누르기 귀찮았는데… 어쩐지… 어쩐지…

원래는 Scroll lock 두번 누르는 것으로 시작되는 명령 모드가, Scroll lock을 Ctrl로 변경할 수도 있어서, 이게 Ctrl로 변경되어 있어서.. Ctrl키를 많이 쓰다보면 막 제멋대로….

[Scroll lock], [Scroll lock], [Enter] 하면 다른 화면 전환.

[Scroll lock], [Scroll lock], m, [Enter] 하면 Mouse emulation mode Enable / Disable.

[Scroll lock], [Scroll lock], w, [Enter] 하면 Switching mouse-port 라던가. 암튼, 휠 버튼 더블클릭으로 마우스 전환. 이건 Mouse emulation mode가 켜져 있어야 동작한다고 한다. 누르면 근데 아마 저절로 Mouse emulation mode가 On되는 듯.

[Scroll lock], [Scroll lock], x, [Enter] 하면 Scroll lock 두번 누를 때 Scroll lock 대신 Ctrl키를 사용할 수 있다.


모르거나 이상하면 매뉴얼을 읽어보자.