comparison mercurial/cext/parsers.c @ 48222:7e78c72ee3ea

dirstate-v2: Initial Python serializer This adds code seralizing a `map` and `copy_map` dicts into dirstate-v2 file formate. This is not used yet. Differential Revision: https://phab.mercurial-scm.org/D11519
author Raphaël Gomès <rgomes@octobus.net>
date Thu, 22 Jul 2021 17:31:37 +0200
parents a32a96079e2d
children f7fd629ffb98
comparison
equal deleted inserted replaced
48221:a32a96079e2d 48222:7e78c72ee3ea
233 } else { 233 } else {
234 return self->mtime; 234 return self->mtime;
235 } 235 }
236 } 236 }
237 237
238 static PyObject *dirstate_item_v2_data(dirstateItemObject *self)
239 {
240 unsigned char flags = self->flags;
241 int mode = dirstate_item_c_v1_mode(self);
242 if ((mode & S_IXUSR) != 0) {
243 flags |= dirstate_flag_mode_exec_perm;
244 } else {
245 flags &= ~dirstate_flag_mode_exec_perm;
246 }
247 if (S_ISLNK(mode)) {
248 flags |= dirstate_flag_mode_is_symlink;
249 } else {
250 flags &= ~dirstate_flag_mode_is_symlink;
251 }
252 return Py_BuildValue("Bii", flags, self->size, self->mtime);
253 };
254
238 static PyObject *dirstate_item_v1_state(dirstateItemObject *self) 255 static PyObject *dirstate_item_v1_state(dirstateItemObject *self)
239 { 256 {
240 char state = dirstate_item_c_v1_state(self); 257 char state = dirstate_item_c_v1_state(self);
241 return PyBytes_FromStringAndSize(&state, 1); 258 return PyBytes_FromStringAndSize(&state, 1);
242 }; 259 };
426 self->size = 0; 443 self->size = 0;
427 } 444 }
428 Py_RETURN_NONE; 445 Py_RETURN_NONE;
429 } 446 }
430 static PyMethodDef dirstate_item_methods[] = { 447 static PyMethodDef dirstate_item_methods[] = {
448 {"v2_data", (PyCFunction)dirstate_item_v2_data, METH_NOARGS,
449 "return data suitable for v2 serialization"},
431 {"v1_state", (PyCFunction)dirstate_item_v1_state, METH_NOARGS, 450 {"v1_state", (PyCFunction)dirstate_item_v1_state, METH_NOARGS,
432 "return a \"state\" suitable for v1 serialization"}, 451 "return a \"state\" suitable for v1 serialization"},
433 {"v1_mode", (PyCFunction)dirstate_item_v1_mode, METH_NOARGS, 452 {"v1_mode", (PyCFunction)dirstate_item_v1_mode, METH_NOARGS,
434 "return a \"mode\" suitable for v1 serialization"}, 453 "return a \"mode\" suitable for v1 serialization"},
435 {"v1_size", (PyCFunction)dirstate_item_v1_size, METH_NOARGS, 454 {"v1_size", (PyCFunction)dirstate_item_v1_size, METH_NOARGS,