mercurial/parsers.c
changeset 21806 05bd2667df4d
parent 21730 8da100383dc3
child 21807 a96a3d1261c6
equal deleted inserted replaced
21805:23f3241406ff 21806:05bd2667df4d
   259  * Efficiently pack a dirstate object into its on-disk format.
   259  * Efficiently pack a dirstate object into its on-disk format.
   260  */
   260  */
   261 static PyObject *pack_dirstate(PyObject *self, PyObject *args)
   261 static PyObject *pack_dirstate(PyObject *self, PyObject *args)
   262 {
   262 {
   263 	PyObject *packobj = NULL;
   263 	PyObject *packobj = NULL;
   264 	PyObject *map, *copymap, *pl;
   264 	PyObject *map, *copymap, *pl, *mtime_unset = NULL;
   265 	Py_ssize_t nbytes, pos, l;
   265 	Py_ssize_t nbytes, pos, l;
   266 	PyObject *k, *v, *pn;
   266 	PyObject *k, *v, *pn;
   267 	char *p, *s;
   267 	char *p, *s;
   268 	double now;
   268 	double now;
   269 
   269 
   340 		if (getintat(v, 3, &mtime) == -1)
   340 		if (getintat(v, 3, &mtime) == -1)
   341 			goto bail;
   341 			goto bail;
   342 		if (*s == 'n' && mtime == (uint32_t)now) {
   342 		if (*s == 'n' && mtime == (uint32_t)now) {
   343 			/* See pure/parsers.py:pack_dirstate for why we do
   343 			/* See pure/parsers.py:pack_dirstate for why we do
   344 			 * this. */
   344 			 * this. */
   345 			if (PyDict_SetItem(map, k, dirstate_unset) == -1)
   345 			mtime = -1;
       
   346 			mtime_unset = Py_BuildValue(
       
   347 				"ciii", *s, mode, size, mtime);
       
   348 			if (!mtime_unset)
   346 				goto bail;
   349 				goto bail;
   347 			mtime = -1;
   350 			if (PyDict_SetItem(map, k, mtime_unset) == -1)
       
   351 				goto bail;
       
   352 			Py_DECREF(mtime_unset);
       
   353 			mtime_unset = NULL;
   348 		}
   354 		}
   349 		putbe32(mode, p);
   355 		putbe32(mode, p);
   350 		putbe32(size, p + 4);
   356 		putbe32(size, p + 4);
   351 		putbe32(mtime, p + 8);
   357 		putbe32(mtime, p + 8);
   352 		t = p + 12;
   358 		t = p + 12;
   372 		goto bail;
   378 		goto bail;
   373 	}
   379 	}
   374 
   380 
   375 	return packobj;
   381 	return packobj;
   376 bail:
   382 bail:
       
   383 	Py_XDECREF(mtime_unset);
   377 	Py_XDECREF(packobj);
   384 	Py_XDECREF(packobj);
   378 	return NULL;
   385 	return NULL;
   379 }
   386 }
   380 
   387 
   381 /*
   388 /*