From 8417c11948532ba890b862dcad9d37810d482616 Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Mon, 6 Sep 2010 00:32:59 -0700 Subject: [PATCH] index.py: handle uid/gid == -1 on cygwin On cygwin, the uid or gid might be -1 for some reason. struct.pack() complains about a DeprecationWarning when packing a negative number into an unsigned int, so fix it up first. Signed-off-by: Avery Pennarun --- lib/bup/index.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/bup/index.py b/lib/bup/index.py index c6329c4..2818fb5 100644 --- a/lib/bup/index.py +++ b/lib/bup/index.py @@ -77,11 +77,15 @@ class Entry: self.flags, self.children_ofs, self.children_n)) def packed(self): - return struct.pack(INDEX_SIG, + try: + return struct.pack(INDEX_SIG, self.dev, self.ctime, self.mtime, self.uid, self.gid, self.size, self.mode, self.gitmode, self.sha, self.flags, self.children_ofs, self.children_n) + except DeprecationWarning, e: + log('pack error: %s (%r)\n' % (e, self)) + raise def from_stat(self, st, tstart): old = (self.dev, self.ctime, self.mtime, @@ -99,6 +103,15 @@ class Entry: if int(st.st_ctime) >= tstart or old != new \ or self.sha == EMPTY_SHA or not self.gitmode: self.invalidate() + self._fixup() + + def _fixup(self): + if self.uid < 0: + self.uid += 0x100000000 + if self.gid < 0: + self.gid += 0x100000000 + assert(self.uid >= 0) + assert(self.gid >= 0) def is_valid(self): f = IX_HASHVALID|IX_EXISTS @@ -151,6 +164,7 @@ class NewEntry(Entry): self.flags, self.children_ofs, self.children_n ) = (dev, int(ctime), int(mtime), uid, gid, size, mode, gitmode, sha, flags, children_ofs, children_n) + self._fixup() class BlankNewEntry(NewEntry): -- 2.39.2