diff --git a/scripts/dbgbmap.py b/scripts/dbgbmap.py index a9a336ba..5a802e4a 100755 --- a/scripts/dbgbmap.py +++ b/scripts/dbgbmap.py @@ -2693,6 +2693,11 @@ class Gstate: fillvalue=0)) self.data = data + @property + def blocks(self): + return tuple(it.chain.from_iterable( + gdelta.blocks for _, gdelta in self.gdeltas)) + @property def size(self): return len(self.data) @@ -3224,6 +3229,7 @@ class Lfs3: # traverse the filesystem def traverse(self, *, mtree_only=False, + gstate=True, shrubs=False, fragments=False, path=False): @@ -3285,6 +3291,24 @@ class Lfs3: else: yield data + # traverse any gstate + if not mtree_only and gstate: + for gstate_ in self.gstate: + if getattr(gstate_, 'btree', None) is None: + continue + + for r in gstate_.btree.traverse( + path=path): + if path: + bid, rbyd, path_ = r + else: + bid, rbyd = r + + if path: + yield rbyd, [(self.mid(-1), gstate_)]+path_ + else: + yield rbyd + # common file operations, note Reg extends this for regular files class File: tag = None diff --git a/scripts/dbgbmapsvg.py b/scripts/dbgbmapsvg.py index fb669012..b8264bf1 100755 --- a/scripts/dbgbmapsvg.py +++ b/scripts/dbgbmapsvg.py @@ -2723,6 +2723,11 @@ class Gstate: fillvalue=0)) self.data = data + @property + def blocks(self): + return tuple(it.chain.from_iterable( + gdelta.blocks for _, gdelta in self.gdeltas)) + @property def size(self): return len(self.data) @@ -3254,6 +3259,7 @@ class Lfs3: # traverse the filesystem def traverse(self, *, mtree_only=False, + gstate=True, shrubs=False, fragments=False, path=False): @@ -3315,6 +3321,24 @@ class Lfs3: else: yield data + # traverse any gstate + if not mtree_only and gstate: + for gstate_ in self.gstate: + if getattr(gstate_, 'btree', None) is None: + continue + + for r in gstate_.btree.traverse( + path=path): + if path: + bid, rbyd, path_ = r + else: + bid, rbyd = r + + if path: + yield rbyd, [(self.mid(-1), gstate_)]+path_ + else: + yield rbyd + # common file operations, note Reg extends this for regular files class File: tag = None diff --git a/scripts/dbglfs3.py b/scripts/dbglfs3.py index 77cb2d45..ec941cda 100755 --- a/scripts/dbglfs3.py +++ b/scripts/dbglfs3.py @@ -2650,6 +2650,11 @@ class Gstate: fillvalue=0)) self.data = data + @property + def blocks(self): + return tuple(it.chain.from_iterable( + gdelta.blocks for _, gdelta in self.gdeltas)) + @property def size(self): return len(self.data) @@ -3181,6 +3186,7 @@ class Lfs3: # traverse the filesystem def traverse(self, *, mtree_only=False, + gstate=True, shrubs=False, fragments=False, path=False): @@ -3242,6 +3248,24 @@ class Lfs3: else: yield data + # traverse any gstate + if not mtree_only and gstate: + for gstate_ in self.gstate: + if getattr(gstate_, 'btree', None) is None: + continue + + for r in gstate_.btree.traverse( + path=path): + if path: + bid, rbyd, path_ = r + else: + bid, rbyd = r + + if path: + yield rbyd, [(self.mid(-1), gstate_)]+path_ + else: + yield rbyd + # common file operations, note Reg extends this for regular files class File: tag = None