跳至主要内容

阅读笔记:Git 源码 (0)

GitHub上检出代码,跳转到第一个commit,那是2005年4月提交的 `e83c5163316f89bfbde7d9ab23ca2e25604af290`。 需要认真复习我的C语言知识了,不过重点不是在于语言,而是这个工具本身的设计。 CACHE_H这个头文件就挺精彩,数据结构直接是基于硬件结构来设计的,注释写的很清楚“根本不考虑可移植性,因为这仅仅是个cache,一切以效率为优先考量”。 ``` /* * Basic data structures for the directory cache * * NOTE NOTE NOTE! This is all in the native CPU byte format. It's * not even trying to be portable. It's trying to be efficient. It's * just a cache, after all. */ #define CACHE_SIGNATURE 0x44495243 /* "DIRC" */ struct cache_header { unsigned int signature; unsigned int version; unsigned int entries; unsigned char sha1[20]; }; /* * The "cache_time" is just the low 32 bits of the * time. It doesn't matter if it overflows - we only * check it for equality in the 32 bits we save. */ struct cache_time { unsigned int sec; unsigned int nsec; }; ``` 此外,作为最基础的数据结构,CACHE_H也定义了一组接口函数。 ``` /* Initialize the cache information */ extern int read_cache(void); /* Return a statically allocated filename matching the sha1 signature */ extern char *sha1_file_name(unsigned char *sha1); /* Write a memory buffer out to the sha file */ extern int write_sha1_buffer(unsigned char *sha1, void *buf, unsigned int size); /* Read and unpack a sha1 file into memory, write memory to a sha1 file */ extern void * read_sha1_file(unsigned char *sha1, char *type, unsigned long *size); extern int write_sha1_file(char *buf, unsigned len); /* Convert to/from hex/sha1 representation */ extern int get_sha1_hex(char *hex, unsigned char *sha1); extern char *sha1_to_hex(unsigned char *sha1); /* static buffer! */ ```

评论