mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 23:38:50 +03:00
c12e300bb8
Summary: Move top-level Python packages `mercurial`, `hgext` and `hgdemandimport` to a new top-level package `edenscm`. This allows the Python packages provided by the upstream Mercurial to be installed side-by-side. To maintain compatibility, `edenscm/` gets added to `sys.path` in `mercurial/__init__.py`. Reviewed By: phillco, ikostia Differential Revision: D13853115 fbshipit-source-id: b296b0673dc54c61ef6a591ebc687057ff53b22e
115 lines
2.6 KiB
Python
115 lines
2.6 KiB
Python
# Copyright 2016 Mercurial Contributors
|
|
#
|
|
# This software may be used and distributed according to the terms of the
|
|
# GNU General Public License version 2 or any later version.
|
|
|
|
from __future__ import absolute_import
|
|
|
|
import cffi
|
|
|
|
|
|
ffi = cffi.FFI()
|
|
ffi.set_source(
|
|
"mercurial.cffi._osutil",
|
|
"""
|
|
#include <sys/attr.h>
|
|
#include <sys/vnode.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <time.h>
|
|
|
|
typedef struct val_attrs {
|
|
uint32_t length;
|
|
attribute_set_t returned;
|
|
attrreference_t name_info;
|
|
fsobj_type_t obj_type;
|
|
struct timespec mtime;
|
|
uint32_t accessmask;
|
|
off_t datalength;
|
|
} __attribute__((aligned(4), packed)) val_attrs_t;
|
|
""",
|
|
include_dirs=["mercurial"],
|
|
)
|
|
ffi.cdef(
|
|
"""
|
|
|
|
typedef uint32_t attrgroup_t;
|
|
|
|
typedef struct attrlist {
|
|
uint16_t bitmapcount; /* number of attr. bit sets in list */
|
|
uint16_t reserved; /* (to maintain 4-byte alignment) */
|
|
attrgroup_t commonattr; /* common attribute group */
|
|
attrgroup_t volattr; /* volume attribute group */
|
|
attrgroup_t dirattr; /* directory attribute group */
|
|
attrgroup_t fileattr; /* file attribute group */
|
|
attrgroup_t forkattr; /* fork attribute group */
|
|
...;
|
|
};
|
|
|
|
typedef struct attribute_set {
|
|
...;
|
|
} attribute_set_t;
|
|
|
|
typedef struct attrreference {
|
|
int attr_dataoffset;
|
|
int attr_length;
|
|
...;
|
|
} attrreference_t;
|
|
|
|
typedef int ... off_t;
|
|
|
|
typedef struct val_attrs {
|
|
uint32_t length;
|
|
attribute_set_t returned;
|
|
attrreference_t name_info;
|
|
uint32_t obj_type;
|
|
struct timespec mtime;
|
|
uint32_t accessmask;
|
|
off_t datalength;
|
|
...;
|
|
} val_attrs_t;
|
|
|
|
/* the exact layout of the above struct will be figured out during build time */
|
|
|
|
typedef int ... time_t;
|
|
|
|
typedef struct timespec {
|
|
time_t tv_sec;
|
|
...;
|
|
};
|
|
|
|
int getattrlist(const char* path, struct attrlist * attrList, void * attrBuf,
|
|
size_t attrBufSize, unsigned int options);
|
|
|
|
int getattrlistbulk(int dirfd, struct attrlist * attrList, void * attrBuf,
|
|
size_t attrBufSize, uint64_t options);
|
|
|
|
#define ATTR_BIT_MAP_COUNT ...
|
|
#define ATTR_CMN_NAME ...
|
|
#define ATTR_CMN_OBJTYPE ...
|
|
#define ATTR_CMN_MODTIME ...
|
|
#define ATTR_CMN_ACCESSMASK ...
|
|
#define ATTR_CMN_ERROR ...
|
|
#define ATTR_CMN_RETURNED_ATTRS ...
|
|
#define ATTR_FILE_DATALENGTH ...
|
|
|
|
#define VREG ...
|
|
#define VDIR ...
|
|
#define VLNK ...
|
|
#define VBLK ...
|
|
#define VCHR ...
|
|
#define VFIFO ...
|
|
#define VSOCK ...
|
|
|
|
#define S_IFMT ...
|
|
|
|
int open(const char *path, int oflag, int perm);
|
|
int close(int);
|
|
|
|
#define O_RDONLY ...
|
|
"""
|
|
)
|
|
|
|
if __name__ == "__main__":
|
|
ffi.compile()
|