Apr 172012
 

SVN을 사용하여 기존에 개발된 소스 디렉토리를 추가하는 경우가 많습니다.
하지만 기존의 디렉토리 구조가 SVN에 적합하지 않거나, 일부분만 SVN과 연동을 하고자 하는 경우가 있습니다.

이런 경우에 처리하기가 좀 곤란해서 여러가지 꼼수를 사용했는데요. 아래와 같이 “svn add -N” 명령어로 간단하게 해결이 가능합니다.


[root@localhost~]# svn help add
add: 파일과 디렉토리를 버전관리 대상에 넣습니다. 저장소에
추가하도록 스케쥴링 되며, 다음 커밋할 때, 추가됩니다.
사용법: add PATH...

옵션:
  --targets ARG            : ARG로 주어진 파일 내용을 옵션으로 추가합니다
  -N [--non-recursive]     : obsolete; try --depth=files or --depth=immediates
  --depth ARG              : 적용할 단계를 제한합니다. 가능한 인자 ('empty', 'files',
                            'immediates', or 'infinity')
  -q [--quiet]             : 아무것도 출력하지 않거나, 요약 정보만 출력합니다
  --force                  : 강제로 실행합니다
  --no-ignore              : svn:ignore로 지정한 것과 디폴트로 무시하는 파일들을 무시하지 않습니다
  --auto-props             : 자동 속성기능을 활성화합니다
  --no-auto-props          : 자동 속성기능을 비활성화합니다
  --parents                : 임시 상위개체 삽입

글로벌 옵션:
  --username ARG           : arg를 접속에 필요한 사용자 ID로 사용합니다
  --password ARG           : arg를 접속에 필요한 패스워드로 사용합니다
  --no-auth-cache          : 인증 정보를 캐시에 저장하지 않습니다
  --non-interactive        : 대화식 사용자 입력을 기다리지 않습니다
  --trust-server-cert      : accept unknown SSL server certificates without
                             prompting (but only with '--non-interactive')
  --config-dir ARG         : arg로 지정된 디렉토리에서 사용자 구성화일을 읽습니다
  --config-option ARG      : set user configuration option in the format:
                                 FILE:SECTION:OPTION=[VALUE]
                             For example:
                                 servers:global:http-library=serf

Apr 172012
 

HTTP/1.1 에서 Cache와 관련된 헤더중에 If-Modified-Since와 ETag를 사용하는 방법이 있습니다.

ETag에 대한 설명은 아래에서 확인이 가능합니다.

http://en.wikipedia.org/wiki/HTTP_ETag

여기서 궁금한 것은 국내에서 많이 사용하고 있는 Apache 웹서버에서는 ETag 값을 어떻게 생성하는지가 궁금해서 소스를 다운받아서 확인을 해봤다.

아래 주석에서와 같이 inode-size-mtime 으로 구성이 하되, hex 값으로 변환을 해서 사용하도록 되어 있습니다. 물론 filetype이 0인 경우에는 mtime값만을 사용하는 것을 149라인에서 확인을 할수 있다.

    113     if (r->finfo.filetype != 0) {
    114         /*
    115          * ETag gets set to [W/]"inode-size-mtime", modulo any
    116          * FileETag keywords.
    117          */
    118         etag = apr_palloc(r->pool, weak_len + sizeof("\"--\"") +
    119                           3 * CHARS_PER_UINT64 + 1);
    120         next = etag;
    121         if (weak) {
    122             while (*weak) {
    123                 *next++ = *weak++;
    124             }
    125         }
    126         *next++ = '"';
    127         bits_added = 0;
    128         if (etag_bits & ETAG_INODE) {
    129             next = etag_uint64_to_hex(next, r->finfo.inode);
    130             bits_added |= ETAG_INODE;
    131         }
    132         if (etag_bits & ETAG_SIZE) {
    133             if (bits_added != 0) {
    134                 *next++ = '-';
    135             }
    136             next = etag_uint64_to_hex(next, r->finfo.size);
    137             bits_added |= ETAG_SIZE;
    138         }
    139         if (etag_bits & ETAG_MTIME) {
    140             if (bits_added != 0) {
    141                 *next++ = '-';
    142             }
    143             next = etag_uint64_to_hex(next, r->mtime);
    144         }
    145         *next++ = '"';
    146         *next = '\0';
    147     }
    148     else {
    149         /*
    150          * Not a file document, so just use the mtime: [W/]"mtime"
    151          */
    152         etag = apr_palloc(r->pool, weak_len + sizeof("\"\"") +
    153                           CHARS_PER_UINT64 + 1);
    154         next = etag;
    155         if (weak) {
    156             while (*weak) {
    157                 *next++ = *weak++;
    158             }
    159         }
    160         *next++ = '"';
    161         next = etag_uint64_to_hex(next, r->mtime);
    162         *next++ = '"';
    163         *next = '\0';
    164     }

아래는 실제 Apache 서버에서 받은 HTTP 헤더에 들어 있는 ETag 값입니다.

위의 ETag 값을 검증해보기 위해서 마지막에 있는 0467ddaad 값을 10진수로 변환을 하고, 해당 값을 Unix Timestamp로 변환을 해보면 다음과 같이 확인이 가능합니다.

Plugin from the creators of Brindes :: More at Plulz Wordpress Plugins