기여 목록 / 8496093
base: Preserve Unix epoch timestamps in POSIX file metadata
BasefixMerged
POSIX 파일 메타데이터의 Unix epoch 시각을 null 시간과 구분하도록 변환을 수정했습니다. epoch 직후 첫 1초 안의 소수점 이하 시각도 보존합니다.
문제 설명
POSIX stat의 초 값 0은 Unix epoch를 뜻하지만 Time::FromTimeT(0)은 null 시간을 반환합니다. 이 함수를 사용하던 File::Info::FromStat()은 수정·접근·생성 시각이 epoch인 경우뿐 아니라 첫 1초 안의 나노초 값도 잘못된 기준에서 계산했습니다.
해결 내용
TimeFromStatTimestamp()를 추가해Time::UnixEpoch()에 초와 마이크로초를 더합니다. 나노초 필드는 기존처럼 마이크로초 정밀도로 변환합니다.- 수정 시각, 접근 시각, 생성 시각을 모두 같은 헬퍼로 변환합니다.
- Apple의
st_mtimespec·st_atimespec·st_birthtimespec과 다른 지원 플랫폼의 필드에 맞춰 테스트를 구성하고, Android 콘텐츠 URI 테스트의 epoch 기대값도Time::UnixEpoch()로 맞춥니다.
테스트 방법
FromStatWithUnixEpochTimestamps는 0으로 초기화한stat에서 세 시각이 모두 Unix epoch가 되는지 확인합니다.FromStatWithTimestampsInFirstUnixSecond는 각각 123456·234567·345678마이크로초가 epoch에 더해지는지 검증합니다. Apple 필드 이름을 사용하는 경로도 포함합니다.- Android 파일 유틸리티 테스트에서 메모리 콘텐츠 제공자의 수정 시각 기대값을 갱신합니다.
Gerrit 기록상 Patch Set 3는 2026-10-03 UTC에 CQ 실행을 통과했습니다. 보고서 작성 과정에서 Chromium 테스트를 별도로 실행하지는 않았습니다.
관련 이슈와 외부 PR
이 변환을 사용하는 파일 읽기 동작은 CL 8486882의 회귀 테스트와 연결됩니다.
배운 점
- 운영체제와 시간 유틸리티가 같은 0 값에 서로 다른 의미를 줄 수 있습니다. epoch와 값 없음은 변환 경계에서 구분해야 합니다.
- 초 단위 경계값뿐 아니라 그 안의 소수점 이하 값과 플랫폼별 구조체 필드도 검사해야 합니다.