Mercurial > hg
comparison mercurial/manifest.c @ 24294:3d485727e45e
lazymanifest: extract function for iterating to next line
This will soon be reused by keys iterator.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Wed, 11 Mar 2015 13:15:26 -0700 |
parents | 30e9ee203846 |
children | 2b7ab29627fd |
comparison
equal
deleted
inserted
replaced
24293:30e9ee203846 | 24294:3d485727e45e |
---|---|
220 lmIter *self = (lmIter *)o; | 220 lmIter *self = (lmIter *)o; |
221 Py_DECREF(self->m); | 221 Py_DECREF(self->m); |
222 PyObject_Del(self); | 222 PyObject_Del(self); |
223 } | 223 } |
224 | 224 |
225 static line *lmiter_nextline(lmIter *self) | |
226 { | |
227 do { | |
228 self->pos++; | |
229 if (self->pos >= self->m->numlines) { | |
230 return NULL; | |
231 } | |
232 /* skip over deleted manifest entries */ | |
233 } while (self->m->lines[self->pos].deleted); | |
234 return self->m->lines + self->pos; | |
235 } | |
236 | |
225 static PyObject *lmiter_iternext(PyObject *o) | 237 static PyObject *lmiter_iternext(PyObject *o) |
226 { | 238 { |
227 size_t pl; | 239 size_t pl; |
228 line *l; | 240 line *l; |
229 Py_ssize_t consumed; | 241 Py_ssize_t consumed; |
230 PyObject *ret = NULL, *path = NULL, *hash = NULL, *flags = NULL; | 242 PyObject *path = NULL, *hash = NULL, *flags = NULL; |
231 lmIter *self = (lmIter *)o; | 243 l = lmiter_nextline((lmIter *)o); |
232 do { | 244 if (!l) { |
233 self->pos++; | 245 goto bail; |
234 if (self->pos >= self->m->numlines) { | 246 } |
235 goto bail; | |
236 } | |
237 /* skip over deleted manifest entries */ | |
238 } while (self->m->lines[self->pos].deleted); | |
239 l = self->m->lines + self->pos; | |
240 pl = pathlen(l); | 247 pl = pathlen(l); |
241 path = PyString_FromStringAndSize(l->start, pl); | 248 path = PyString_FromStringAndSize(l->start, pl); |
242 hash = nodeof(l); | 249 hash = nodeof(l); |
243 consumed = pl + 41; | 250 consumed = pl + 41; |
244 flags = PyString_FromStringAndSize(l->start + consumed, | 251 flags = PyString_FromStringAndSize(l->start + consumed, |
245 l->len - consumed - 1); | 252 l->len - consumed - 1); |
246 if (!path || !hash || !flags) { | 253 if (!path || !hash || !flags) { |
247 goto bail; | 254 goto bail; |
248 } | 255 } |
249 ret = PyTuple_Pack(3, path, hash, flags); | 256 return PyTuple_Pack(3, path, hash, flags); |
250 bail: | 257 bail: |
251 Py_XDECREF(path); | 258 Py_XDECREF(path); |
252 Py_XDECREF(hash); | 259 Py_XDECREF(hash); |
253 Py_XDECREF(flags); | 260 Py_XDECREF(flags); |
254 return ret; | 261 return NULL; |
255 } | 262 } |
256 | 263 |
257 static PyTypeObject lazymanifestIterator = { | 264 static PyTypeObject lazymanifestIterator = { |
258 PyObject_HEAD_INIT(NULL) | 265 PyObject_HEAD_INIT(NULL) |
259 0, /*ob_size */ | 266 0, /*ob_size */ |