annotate mercurial/cffi/osutilbuild.py @ 48722:92b5a2c4d637

revlog: split revlog v1 and revlog v2 handling Explicitly splitting their fields packing and unpacking makes it easier to extend the existing C implemenation to handle the new changelog format, whose fields and offsets are not simply a superset of the revlog. Differential Revision: https://phab.mercurial-scm.org/D12137
author pacien <pacien.trangirard@pacien.net>
date Wed, 26 Jan 2022 13:18:48 +0100
parents 53607fd3ec6c
children 6000f5b25c9b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29600
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
1 from __future__ import absolute_import
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
2
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
3 import cffi
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
4
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
5 ffi = cffi.FFI()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 32506
diff changeset
6 ffi.set_source(
43668
53607fd3ec6c cffi: fix build on Python 3
Manuel Jacob <me@manueljacob.de>
parents: 43077
diff changeset
7 "mercurial.cffi._osutil",
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 32506
diff changeset
8 """
29600
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
9 #include <sys/attr.h>
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
10 #include <sys/vnode.h>
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
11 #include <unistd.h>
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
12 #include <fcntl.h>
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
13 #include <time.h>
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
14
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
15 typedef struct val_attrs {
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
16 uint32_t length;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
17 attribute_set_t returned;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
18 attrreference_t name_info;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
19 fsobj_type_t obj_type;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
20 struct timespec mtime;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
21 uint32_t accessmask;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
22 off_t datalength;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
23 } __attribute__((aligned(4), packed)) val_attrs_t;
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 32506
diff changeset
24 """,
43668
53607fd3ec6c cffi: fix build on Python 3
Manuel Jacob <me@manueljacob.de>
parents: 43077
diff changeset
25 include_dirs=['mercurial'],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 32506
diff changeset
26 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 32506
diff changeset
27 ffi.cdef(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 32506
diff changeset
28 '''
29600
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
29
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
30 typedef uint32_t attrgroup_t;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
31
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
32 typedef struct attrlist {
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
33 uint16_t bitmapcount; /* number of attr. bit sets in list */
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
34 uint16_t reserved; /* (to maintain 4-byte alignment) */
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
35 attrgroup_t commonattr; /* common attribute group */
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
36 attrgroup_t volattr; /* volume attribute group */
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
37 attrgroup_t dirattr; /* directory attribute group */
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
38 attrgroup_t fileattr; /* file attribute group */
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
39 attrgroup_t forkattr; /* fork attribute group */
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
40 ...;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
41 };
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
42
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
43 typedef struct attribute_set {
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
44 ...;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
45 } attribute_set_t;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
46
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
47 typedef struct attrreference {
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
48 int attr_dataoffset;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
49 int attr_length;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
50 ...;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
51 } attrreference_t;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
52
29910
a043c6d372db osutil: fix the declaration to work on different sizes of off_t
Maciej Fijalkowski <fijall@gmail.com>
parents: 29600
diff changeset
53 typedef int ... off_t;
a043c6d372db osutil: fix the declaration to work on different sizes of off_t
Maciej Fijalkowski <fijall@gmail.com>
parents: 29600
diff changeset
54
29600
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
55 typedef struct val_attrs {
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
56 uint32_t length;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
57 attribute_set_t returned;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
58 attrreference_t name_info;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
59 uint32_t obj_type;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
60 struct timespec mtime;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
61 uint32_t accessmask;
29910
a043c6d372db osutil: fix the declaration to work on different sizes of off_t
Maciej Fijalkowski <fijall@gmail.com>
parents: 29600
diff changeset
62 off_t datalength;
29600
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
63 ...;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
64 } val_attrs_t;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
65
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
66 /* the exact layout of the above struct will be figured out during build time */
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
67
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
68 typedef int ... time_t;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
69
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
70 typedef struct timespec {
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
71 time_t tv_sec;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
72 ...;
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
73 };
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
74
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
75 int getattrlist(const char* path, struct attrlist * attrList, void * attrBuf,
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
76 size_t attrBufSize, unsigned int options);
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
77
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
78 int getattrlistbulk(int dirfd, struct attrlist * attrList, void * attrBuf,
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
79 size_t attrBufSize, uint64_t options);
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
80
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
81 #define ATTR_BIT_MAP_COUNT ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
82 #define ATTR_CMN_NAME ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
83 #define ATTR_CMN_OBJTYPE ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
84 #define ATTR_CMN_MODTIME ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
85 #define ATTR_CMN_ACCESSMASK ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
86 #define ATTR_CMN_ERROR ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
87 #define ATTR_CMN_RETURNED_ATTRS ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
88 #define ATTR_FILE_DATALENGTH ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
89
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
90 #define VREG ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
91 #define VDIR ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
92 #define VLNK ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
93 #define VBLK ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
94 #define VCHR ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
95 #define VFIFO ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
96 #define VSOCK ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
97
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
98 #define S_IFMT ...
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
99
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
100 int open(const char *path, int oflag, int perm);
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
101 int close(int);
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
102
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
103 #define O_RDONLY ...
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 32506
diff changeset
104 '''
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 32506
diff changeset
105 )
29600
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
106
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
107 if __name__ == '__main__':
7a157639b8f2 osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
108 ffi.compile()