diff --git a/do_test.py b/do_test.py index bdc6d92..c8e45da 100644 --- a/do_test.py +++ b/do_test.py @@ -48,6 +48,44 @@ def fail( msg , fd=os.sys.stdout ) : os.chdir('../..') +os.chdir( 'tests/branchcount.git' ) +repo = git_workflow_quality.Repository() +count = len(repo.branches) +if count == 5 : + ret += ok( "branch count working" ) +else : + ret += fail( "counted %d branches" % count ) +os.chdir('../..') + + +os.chdir( 'tests/complexnetwork.git' ) +repo = git_workflow_quality.Repository() +count = len([ c for c in repo.values() if not c.child ]) +if count == 2 : + ret += ok( "open branches properly found" ) +else : + ret += fail( "found %d opened branches" % count ) +# +count = repo.event_list()[0]['multimerged'] +if count == 1 : + ret += ok( "1 multimerged found" ) +else : + ret += fail( "%d multimerged found" % count ) +# +count = repo.event_list()[0]['conflict'] +if count == 1 : + ret += ok( "1 conflict found" ) +else : + ret += fail( "%d conflict found" % count ) +# +count = len(repo.branches) +if count == 8 : + ret += ok( "complex branches properly concatenated" ) +else : + ret += fail( "complex concatenation produced %d branches" % count ) +os.chdir('../..') + + def test_event ( event ) : os.chdir( 'tests/%s.git' % event ) repo = git_workflow_quality.Repository() diff --git a/git_workflow_quality/__init__.py b/git_workflow_quality/__init__.py index d789396..debb131 100644 --- a/git_workflow_quality/__init__.py +++ b/git_workflow_quality/__init__.py @@ -44,6 +44,8 @@ def add_child ( self , child ) : self.child = child elif child not in self.forks : self.forks.append( child ) + if not child.child and child.forks : + child.child = child.forks.pop(0) def get_parents ( self , full=True ) : parents = [] @@ -102,6 +104,9 @@ def merges ( self ) : def stats ( self ) : return len(self), len(self.commits()), len(self.merges()) + def matches ( self , other ) : + return self.name.startswith( other.name ) or other.name.startswith( self.name ) + def begin ( self ) : begins = [ c for c in list.__iter__(self) if not c.parent ] if not begins : @@ -113,7 +118,7 @@ def end ( self ) : ends = [ c for c in list.__iter__(self) if not c.child ] if not ends : ends = [ c for c in list.__iter__(self) if c.child.branch != self ] - if not ends : + if len(ends) != 1 : # This just searches end on direct childs, and will not detect indirect merge-backs ends = [ end for end in ends if not end.child or not end.child.branch.end().child or end.child.branch.end().child.branch != self ] assert len(ends) == 1 @@ -378,12 +383,32 @@ def get_branches () : fd.close() return branches +class BranchList ( list ) : + + def __init__ ( self ) : + self.names = [] + list.__init__( self ) + + def get ( self , name ) : + match = [ b for b in self if b.name == name ] + if item.name in self.names : + assert len(match) == 1 + return match[0] + assert not match + return None + + def append ( self , item ) : + if item.name in self.names : assert False + self.names.append( item.name ) + list.append( self , item ) + class Repository ( dict ) : - def __init__ ( self ) : + def __init__ ( self , concatenate=True ) : self.order = [] - self.branches = [] + self.branches = BranchList() + self.concatenated = concatenate cmd = subprocess.Popen( ['git', 'log', '--all', '--format="%H \"%ae\" \"%ce\" %s"'] , stdout=subprocess.PIPE ) line = cmd.stdout.readline() @@ -408,6 +433,9 @@ def __init__ ( self ) : self.set_childs() + if self.concatenated : + self.concatenated = self.concatenation() + def set_params ( self , sha , line ) : self[sha].author_date = int(line[0]) self[sha].committer_date = int(line[1]) @@ -419,8 +447,8 @@ def set_params ( self , sha , line ) : raise Exception( "Octopus merges on %s from %s not handled" % ( self[sha].sha , ", ".join([c.sha for c in self[sha].parents]) ) ) def new_branch ( self , branchname , orphan=False ) : - match = [ branch for branch in self.branches if branch.name == branchname ] - if match : + if branchname in self.branches.names : + match = [ branch for branch in self.branches if branch.name == branchname ] assert len(match) == 1 if match[0].is_primary() : return match[0] @@ -429,6 +457,14 @@ def new_branch ( self , branchname , orphan=False ) : self.branches.append( Branch(branchname, orphan) ) return self.branches[-1] + def join_branch ( self , source , branch ) : + source.set_child( branch.begin() ) + for commit in list(branch) : + source.branch.append( commit ) + self.branches.remove(branch) + if len(source.branch.name) > len(branch.name) : + source.branch.name = branch.name + def events( self , details=False) : output = [''] event_list , msgs = self.event_list( details ) @@ -436,12 +472,19 @@ def events( self , details=False) : if msgs : output.extend( msgs ) output.append( "Branch events" ) + if self.concatenated and self.base_events : output[-1] += " %+10d branches" % self.concatenated output.append( " multitarget %4d" % event_list['multitarget'] ) + if self.concatenated and self.base_events : output[-1] += " %4d" % self.base_events['multitarget'] output.append( " reutilized %4d" % event_list['reutilized'] ) + if self.concatenated and self.base_events : output[-1] += " %4d" % self.base_events['reutilized'] output.append( " multimerged %4d" % event_list['multimerged'] ) + if self.concatenated and self.base_events : output[-1] += " %4d" % self.base_events['multimerged'] output.append( " indirect %4d" % event_list['indirect'] ) + if self.concatenated and self.base_events : output[-1] += " %4d" % self.base_events['indirect'] output.append( " multisource %4d" % event_list['multisource'] ) + if self.concatenated and self.base_events : output[-1] += " %4d" % self.base_events['multisource'] output.append( " conflict %4d" % event_list['conflict'] ) + if self.concatenated and self.base_events : output[-1] += " %4d" % self.base_events['conflict'] output.append( "" ) return "\n".join(output) @@ -655,27 +698,53 @@ def set_childs ( self ) : branch.ancestry( c ) self.order.reverse() - n , m = 0 , 0 + m = 0 + # Remove items within the loop is not safe + __branches = [ branch for branch in self.branches if len(branch) == 0 ] + for branch in __branches : + self.branches.remove(branch) + m += 1 + if m : + print "ERROR : generated %d empty branches" % m + + def concatenation ( self ) : + + self.base_events , drop = self.event_list() + + n = 0 # Remove items within the loop is not safe __branches = [ branch for branch in self.branches ] for branch in __branches : - if len(branch) == 0 : - self.branches.remove(branch) - m += 1 + + begin = branch.begin() + if not begin.parent : continue + + source = begin.parent + if not source.forks and not begin.parents : + # This is in fact a plain commit with a single edge. As ancestry assigns childs, it cannot be detected there + self.join_branch( source , branch ) + n += 1 continue - source = branch.begin().parent - if not source : continue - if ( source.child and source.child.branch == branch ) or \ - branch.name.startswith( source.branch.name ) or source.branch.name.startswith( branch.name ) : - source.set_child( branch.begin() ) - for commit in list(branch) : - source.branch.append( commit ) - assert len(branch) == 0 - self.branches.remove(branch) - source.branch.name = branch.name + + if [ c for c in begin.get_childs() if c.branch == source.branch ] : + print "WARNING : %s merged back into %s" % ( begin.branch.pretty() , source.branch.pretty() ) + continue + + # Concatenation happens in two cases : + # incoming merge : a parent commit whose single child is the first commit on branch + # outgoing merge : the first commit has a single parent, and this is the only one of their childs with a single parent + candidates = [ c for c in begin.get_parents() if not c.forks ] + [ c.parent for c in begin.parent.get_childs() if not begin.parents and not c.parents ] + if len(candidates) != 1 : continue + + source = candidates[0] + if source.branch.end() == source and branch.matches( source.branch ) : + self.join_branch( source , branch ) n += 1 + if n : print "WARNING : %d branches removed by concatenation with parents" % n - if m : - print "ERROR : generated %d empty branches" % m + else : + self.base_events = [] + + return n diff --git a/gwfqa b/gwfqa index acdd958..841afdf 100644 --- a/gwfqa +++ b/gwfqa @@ -10,10 +10,11 @@ if __name__ == '__main__' : parser = argparse.ArgumentParser(description='Extract simple analytics from git repository') parser.add_argument('--detailed', action='store_true', help='Show per-branch statistics') parser.add_argument('--graph', choices=['topo', 'date', 'backwards'], help='Generate gitgraphjs file') + parser.add_argument('--no-concatenate', dest='concatenate', action='store_false', help='Express branch relations in dot language') parser.add_argument('--dot', help='Express branch relations in dot language') args = parser.parse_args() - repo = git_workflow_quality.Repository() + repo = git_workflow_quality.Repository(args.concatenate) print repo.report(args.detailed) diff --git a/tests/branchcount.git/HEAD b/tests/branchcount.git/HEAD new file mode 100644 index 0000000..d1b4f04 --- /dev/null +++ b/tests/branchcount.git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/branch3 diff --git a/tests/branchcount.git/config b/tests/branchcount.git/config new file mode 100644 index 0000000..78387c5 --- /dev/null +++ b/tests/branchcount.git/config @@ -0,0 +1,8 @@ +[core] + repositoryformatversion = 0 + filemode = false + bare = false + logallrefupdates = true + symlinks = false + ignorecase = true + hideDotFiles = dotGitOnly diff --git a/tests/branchcount.git/objects/00/91c09e8b12029e0b86d7c323848d0da43cb2e3 b/tests/branchcount.git/objects/00/91c09e8b12029e0b86d7c323848d0da43cb2e3 new file mode 100644 index 0000000..c12c17f Binary files /dev/null and b/tests/branchcount.git/objects/00/91c09e8b12029e0b86d7c323848d0da43cb2e3 differ diff --git a/tests/branchcount.git/objects/08/0a3932dcae93c49a92d07a2477e41dd4154617 b/tests/branchcount.git/objects/08/0a3932dcae93c49a92d07a2477e41dd4154617 new file mode 100644 index 0000000..c0504a3 Binary files /dev/null and b/tests/branchcount.git/objects/08/0a3932dcae93c49a92d07a2477e41dd4154617 differ diff --git a/tests/branchcount.git/objects/0b/2dfcb3403da0800449b25cfb221362ca698bf5 b/tests/branchcount.git/objects/0b/2dfcb3403da0800449b25cfb221362ca698bf5 new file mode 100644 index 0000000..de21760 Binary files /dev/null and b/tests/branchcount.git/objects/0b/2dfcb3403da0800449b25cfb221362ca698bf5 differ diff --git a/tests/branchcount.git/objects/0b/bb2de8671e2453f096d51cd4582aa197949835 b/tests/branchcount.git/objects/0b/bb2de8671e2453f096d51cd4582aa197949835 new file mode 100644 index 0000000..c5afbba --- /dev/null +++ b/tests/branchcount.git/objects/0b/bb2de8671e2453f096d51cd4582aa197949835 @@ -0,0 +1,5 @@ +xMj1 @} + AA)]g+hdO2e&\3tg-gN-IT + +Zʹ1v5Hj$ +UJsc_+gq;wi.-||᱾.| $<#!pnz?FF{ \ No newline at end of file diff --git a/tests/branchcount.git/objects/18/d8643a6ac85dcf3578afe77c5514dc5100b160 b/tests/branchcount.git/objects/18/d8643a6ac85dcf3578afe77c5514dc5100b160 new file mode 100644 index 0000000..0ff10ee Binary files /dev/null and b/tests/branchcount.git/objects/18/d8643a6ac85dcf3578afe77c5514dc5100b160 differ diff --git a/tests/branchcount.git/objects/1d/d2bfd7cfeb86583811b772f5c9b270a9439672 b/tests/branchcount.git/objects/1d/d2bfd7cfeb86583811b772f5c9b270a9439672 new file mode 100644 index 0000000..b785d0d Binary files /dev/null and b/tests/branchcount.git/objects/1d/d2bfd7cfeb86583811b772f5c9b270a9439672 differ diff --git a/tests/branchcount.git/objects/28/11f01bc9ab54c696f0d7684d9090c6778f2505 b/tests/branchcount.git/objects/28/11f01bc9ab54c696f0d7684d9090c6778f2505 new file mode 100644 index 0000000..462d1b4 Binary files /dev/null and b/tests/branchcount.git/objects/28/11f01bc9ab54c696f0d7684d9090c6778f2505 differ diff --git a/tests/branchcount.git/objects/31/6007ef56a63870d5ff147e1493037b7df058bb b/tests/branchcount.git/objects/31/6007ef56a63870d5ff147e1493037b7df058bb new file mode 100644 index 0000000..6be5766 Binary files /dev/null and b/tests/branchcount.git/objects/31/6007ef56a63870d5ff147e1493037b7df058bb differ diff --git a/tests/branchcount.git/objects/33/cc5e9f5fe9530b5cc9eab984d30cda85310920 b/tests/branchcount.git/objects/33/cc5e9f5fe9530b5cc9eab984d30cda85310920 new file mode 100644 index 0000000..501f456 Binary files /dev/null and b/tests/branchcount.git/objects/33/cc5e9f5fe9530b5cc9eab984d30cda85310920 differ diff --git a/tests/branchcount.git/objects/45/a1efea7ca2d55fae24a8f62f29feeee4990313 b/tests/branchcount.git/objects/45/a1efea7ca2d55fae24a8f62f29feeee4990313 new file mode 100644 index 0000000..6fa2162 Binary files /dev/null and b/tests/branchcount.git/objects/45/a1efea7ca2d55fae24a8f62f29feeee4990313 differ diff --git a/tests/branchcount.git/objects/4b/d1087aaf4d5b24fa17b6aaba80f8f4bc90502a b/tests/branchcount.git/objects/4b/d1087aaf4d5b24fa17b6aaba80f8f4bc90502a new file mode 100644 index 0000000..ae36eec Binary files /dev/null and b/tests/branchcount.git/objects/4b/d1087aaf4d5b24fa17b6aaba80f8f4bc90502a differ diff --git a/tests/branchcount.git/objects/58/52f44639f52db67d30ad9143b86afb143d415f b/tests/branchcount.git/objects/58/52f44639f52db67d30ad9143b86afb143d415f new file mode 100644 index 0000000..a045f98 Binary files /dev/null and b/tests/branchcount.git/objects/58/52f44639f52db67d30ad9143b86afb143d415f differ diff --git a/tests/branchcount.git/objects/58/b29b4871b9c063309986225fdaf63cbf039426 b/tests/branchcount.git/objects/58/b29b4871b9c063309986225fdaf63cbf039426 new file mode 100644 index 0000000..f5dc939 Binary files /dev/null and b/tests/branchcount.git/objects/58/b29b4871b9c063309986225fdaf63cbf039426 differ diff --git a/tests/branchcount.git/objects/7a/b747d7ada18252e16291d9e552d85db56ada1d b/tests/branchcount.git/objects/7a/b747d7ada18252e16291d9e552d85db56ada1d new file mode 100644 index 0000000..ef83ce1 Binary files /dev/null and b/tests/branchcount.git/objects/7a/b747d7ada18252e16291d9e552d85db56ada1d differ diff --git a/tests/branchcount.git/objects/84/fd538a36d65b0cf3ab7f6c503af812fce9cb1a b/tests/branchcount.git/objects/84/fd538a36d65b0cf3ab7f6c503af812fce9cb1a new file mode 100644 index 0000000..ac1ec42 --- /dev/null +++ b/tests/branchcount.git/objects/84/fd538a36d65b0cf3ab7f6c503af812fce9cb1a @@ -0,0 +1,2 @@ +xI +1@Q9ET:v*D[zgpuDa[)Cn0XRk^CvALf/l0A=U+1GΓw .K+O,c {FWrRTh]}PSk|LSiClu 8Ҋ`|b֪d$\j4Í߳veޟp9c~$4ݻQϕ=D3ZF[xJL!V\bw_DJX#* 위9x_fkf>dw|~7Y֧|l/=<FOŧwmg5ɞ/}L̲7 ]l \ No newline at end of file diff --git a/tests/complexnetwork.git/objects/10/0d726fb9b103486c1b312a6d47b6046ad9835a b/tests/complexnetwork.git/objects/10/0d726fb9b103486c1b312a6d47b6046ad9835a new file mode 100644 index 0000000..32bd9f8 --- /dev/null +++ b/tests/complexnetwork.git/objects/10/0d726fb9b103486c1b312a6d47b6046ad9835a @@ -0,0 +1 @@ +x+)JMU047a040031QH*JK0dUk{?-zW'\RECD7˯j Ntޑ[1E1a%&1쩸W*I)r#Fl \ No newline at end of file diff --git a/tests/complexnetwork.git/objects/16/752bc680db9f271a62330f41e0fa02541748ea b/tests/complexnetwork.git/objects/16/752bc680db9f271a62330f41e0fa02541748ea new file mode 100644 index 0000000..7d7cb49 Binary files /dev/null and b/tests/complexnetwork.git/objects/16/752bc680db9f271a62330f41e0fa02541748ea differ diff --git a/tests/complexnetwork.git/objects/25/21f9e788e9c1b8618263e494491dff64599616 b/tests/complexnetwork.git/objects/25/21f9e788e9c1b8618263e494491dff64599616 new file mode 100644 index 0000000..b83ee03 --- /dev/null +++ b/tests/complexnetwork.git/objects/25/21f9e788e9c1b8618263e494491dff64599616 @@ -0,0 +1 @@ +xKOR02c,LQH,2,.1 p \ No newline at end of file diff --git a/tests/complexnetwork.git/objects/2c/5c60d133f73596a77c8af2d297bbd9615b6249 b/tests/complexnetwork.git/objects/2c/5c60d133f73596a77c8af2d297bbd9615b6249 new file mode 100644 index 0000000..45ce095 Binary files /dev/null and b/tests/complexnetwork.git/objects/2c/5c60d133f73596a77c8af2d297bbd9615b6249 differ diff --git a/tests/complexnetwork.git/objects/2d/a1c6f425e30cb49e7108e60c26ab7fd9288af1 b/tests/complexnetwork.git/objects/2d/a1c6f425e30cb49e7108e60c26ab7fd9288af1 new file mode 100644 index 0000000..b9cec76 --- /dev/null +++ b/tests/complexnetwork.git/objects/2d/a1c6f425e30cb49e7108e60c26ab7fd9288af1 @@ -0,0 +1 @@ +xMJ1]BJU~Aĵ xJ2==V<|}ۖb.wP9  넠Z!v 17z=lGTp(;L'OBŖriUJ5pzjɗ9bþעþʲ}|xYdߞ D>g0SWguU.t2?wZ- \ No newline at end of file diff --git a/tests/complexnetwork.git/objects/30/18d1a1eb7a54f9f5225deb210f18595189061a b/tests/complexnetwork.git/objects/30/18d1a1eb7a54f9f5225deb210f18595189061a new file mode 100644 index 0000000..f5d4b85 Binary files /dev/null and b/tests/complexnetwork.git/objects/30/18d1a1eb7a54f9f5225deb210f18595189061a differ diff --git a/tests/complexnetwork.git/objects/35/b0b2d786ccd201db37b83ca8f21f7d363499af b/tests/complexnetwork.git/objects/35/b0b2d786ccd201db37b83ca8f21f7d363499af new file mode 100644 index 0000000..73cf87a --- /dev/null +++ b/tests/complexnetwork.git/objects/35/b0b2d786ccd201db37b83ca8f21f7d363499af @@ -0,0 +1,2 @@ +xAj0@Ѯuhƒ%(%rhTqPgÃ-GofB +:d &UXJY]:ĨT*K,YԐgLcF?gy-*?}dY?u߾!%NHd?ܿtf@G \ No newline at end of file diff --git a/tests/complexnetwork.git/objects/39/d03b0744c96e1c1c6658c6300a33a71ab824cd b/tests/complexnetwork.git/objects/39/d03b0744c96e1c1c6658c6300a33a71ab824cd new file mode 100644 index 0000000..6ee1266 Binary files /dev/null and b/tests/complexnetwork.git/objects/39/d03b0744c96e1c1c6658c6300a33a71ab824cd differ diff --git a/tests/complexnetwork.git/objects/3e/c98557b655f3bdab4c48be2f23444b734c8e77 b/tests/complexnetwork.git/objects/3e/c98557b655f3bdab4c48be2f23444b734c8e77 new file mode 100644 index 0000000..a94d27e Binary files /dev/null and b/tests/complexnetwork.git/objects/3e/c98557b655f3bdab4c48be2f23444b734c8e77 differ diff --git a/tests/complexnetwork.git/objects/42/27b26b07fd991512881a4ab630dd75311c10b8 b/tests/complexnetwork.git/objects/42/27b26b07fd991512881a4ab630dd75311c10b8 new file mode 100644 index 0000000..8746323 --- /dev/null +++ b/tests/complexnetwork.git/objects/42/27b26b07fd991512881a4ab630dd75311c10b8 @@ -0,0 +1,3 @@ +xA +1 E] ҴӴ׮B:2HzOe86fJ}hB%$}0K?go\ѠűđET1cIHpL6˄V8g +gY{{.<;Y`~H݌ZilK7Cnh~G \ No newline at end of file diff --git a/tests/complexnetwork.git/objects/42/6ade47e4470267355dc6d8ff745781bf0368da b/tests/complexnetwork.git/objects/42/6ade47e4470267355dc6d8ff745781bf0368da new file mode 100644 index 0000000..a29d0db Binary files /dev/null and b/tests/complexnetwork.git/objects/42/6ade47e4470267355dc6d8ff745781bf0368da differ diff --git a/tests/complexnetwork.git/objects/4d/1e0f3b0540e1f21d7c742f54859f7c12279b31 b/tests/complexnetwork.git/objects/4d/1e0f3b0540e1f21d7c742f54859f7c12279b31 new file mode 100644 index 0000000..3a0d4dd Binary files /dev/null and b/tests/complexnetwork.git/objects/4d/1e0f3b0540e1f21d7c742f54859f7c12279b31 differ diff --git a/tests/complexnetwork.git/objects/57/1d4f525e5130abbdb0560b1584ab993cb7e578 b/tests/complexnetwork.git/objects/57/1d4f525e5130abbdb0560b1584ab993cb7e578 new file mode 100644 index 0000000..3ad2cd3 Binary files /dev/null and b/tests/complexnetwork.git/objects/57/1d4f525e5130abbdb0560b1584ab993cb7e578 differ diff --git a/tests/complexnetwork.git/objects/58/52f44639f52db67d30ad9143b86afb143d415f b/tests/complexnetwork.git/objects/58/52f44639f52db67d30ad9143b86afb143d415f new file mode 100644 index 0000000..a045f98 Binary files /dev/null and b/tests/complexnetwork.git/objects/58/52f44639f52db67d30ad9143b86afb143d415f differ diff --git a/tests/complexnetwork.git/objects/59/34a5f9630444b41dba31bbfb54653a10b350d1 b/tests/complexnetwork.git/objects/59/34a5f9630444b41dba31bbfb54653a10b350d1 new file mode 100644 index 0000000..08079e7 Binary files /dev/null and b/tests/complexnetwork.git/objects/59/34a5f9630444b41dba31bbfb54653a10b350d1 differ diff --git a/tests/complexnetwork.git/objects/59/d627376827784580f240cc865e44dab34cd174 b/tests/complexnetwork.git/objects/59/d627376827784580f240cc865e44dab34cd174 new file mode 100644 index 0000000..e46ef21 Binary files /dev/null and b/tests/complexnetwork.git/objects/59/d627376827784580f240cc865e44dab34cd174 differ diff --git a/tests/complexnetwork.git/objects/5b/94910af13fb18dcb229691572cab70367062d6 b/tests/complexnetwork.git/objects/5b/94910af13fb18dcb229691572cab70367062d6 new file mode 100644 index 0000000..d176449 Binary files /dev/null and b/tests/complexnetwork.git/objects/5b/94910af13fb18dcb229691572cab70367062d6 differ diff --git a/tests/complexnetwork.git/objects/64/043aeb0f2d4c068e013b7859121d7babe17430 b/tests/complexnetwork.git/objects/64/043aeb0f2d4c068e013b7859121d7babe17430 new file mode 100644 index 0000000..d53d026 Binary files /dev/null and b/tests/complexnetwork.git/objects/64/043aeb0f2d4c068e013b7859121d7babe17430 differ diff --git a/tests/complexnetwork.git/objects/66/c2df3a6a0da39a9af583381307539927647142 b/tests/complexnetwork.git/objects/66/c2df3a6a0da39a9af583381307539927647142 new file mode 100644 index 0000000..0795b98 Binary files /dev/null and b/tests/complexnetwork.git/objects/66/c2df3a6a0da39a9af583381307539927647142 differ diff --git a/tests/complexnetwork.git/objects/74/071922c169dd14300d31d67f2dfa3316c5dd09 b/tests/complexnetwork.git/objects/74/071922c169dd14300d31d67f2dfa3316c5dd09 new file mode 100644 index 0000000..35c238e Binary files /dev/null and b/tests/complexnetwork.git/objects/74/071922c169dd14300d31d67f2dfa3316c5dd09 differ diff --git a/tests/complexnetwork.git/objects/85/85c4d033ed5c2e1d01f320eeb06facde9fc29c b/tests/complexnetwork.git/objects/85/85c4d033ed5c2e1d01f320eeb06facde9fc29c new file mode 100644 index 0000000..f682668 Binary files /dev/null and b/tests/complexnetwork.git/objects/85/85c4d033ed5c2e1d01f320eeb06facde9fc29c differ diff --git a/tests/complexnetwork.git/objects/8b/47af992ef147a0b5677c814701d8ce37ea076a b/tests/complexnetwork.git/objects/8b/47af992ef147a0b5677c814701d8ce37ea076a new file mode 100644 index 0000000..b4507d3 Binary files /dev/null and b/tests/complexnetwork.git/objects/8b/47af992ef147a0b5677c814701d8ce37ea076a differ diff --git a/tests/complexnetwork.git/objects/8d/027ee2d223b268aebb9f45971da392bfbc1513 b/tests/complexnetwork.git/objects/8d/027ee2d223b268aebb9f45971da392bfbc1513 new file mode 100644 index 0000000..fb89f99 Binary files /dev/null and b/tests/complexnetwork.git/objects/8d/027ee2d223b268aebb9f45971da392bfbc1513 differ diff --git a/tests/complexnetwork.git/objects/90/4ada2e4081e45aadaf66c29524da6676c7fa0e b/tests/complexnetwork.git/objects/90/4ada2e4081e45aadaf66c29524da6676c7fa0e new file mode 100644 index 0000000..f1dc678 --- /dev/null +++ b/tests/complexnetwork.git/objects/90/4ada2e4081e45aadaf66c29524da6676c7fa0e @@ -0,0 +1,2 @@ +x +!@> "Z8ZƘcg'RrJ]o1rgvsER B@k"L0KlJg=$0 F7%)I6~w_iƏs!rh < %uLÆ}ۋGM \ No newline at end of file diff --git a/tests/complexnetwork.git/objects/91/bc0dca437a3377984c069bf36f4e6c6c10af4b b/tests/complexnetwork.git/objects/91/bc0dca437a3377984c069bf36f4e6c6c10af4b new file mode 100644 index 0000000..fb33797 --- /dev/null +++ b/tests/complexnetwork.git/objects/91/bc0dca437a3377984c069bf36f4e6c6c10af4b @@ -0,0 +1 @@ +xMJA ]) I'ׂꪙgi ^Ճ=xy[iFz[)Ŵ(".41WW F8RwVWTQ<8^#g,EG`JZyW*B0ɖ\jI $IEчdF4$l4#KZ+1t5hƈ~Hl56iKUVƟ92o/8?[ؗy^N `oL]GMZVdm/bU&~G \ No newline at end of file diff --git a/tests/complexnetwork.git/objects/bc/78d72b2eaefa6508ff12ff1f6264390fd6206d b/tests/complexnetwork.git/objects/bc/78d72b2eaefa6508ff12ff1f6264390fd6206d new file mode 100644 index 0000000..1990985 Binary files /dev/null and b/tests/complexnetwork.git/objects/bc/78d72b2eaefa6508ff12ff1f6264390fd6206d differ diff --git a/tests/complexnetwork.git/objects/c4/6a964ed35b3f794561c039ede9b9c3f34cabd7 b/tests/complexnetwork.git/objects/c4/6a964ed35b3f794561c039ede9b9c3f34cabd7 new file mode 100644 index 0000000..741ed7a --- /dev/null +++ b/tests/complexnetwork.git/objects/c4/6a964ed35b3f794561c039ede9b9c3f34cabd7 @@ -0,0 +1,2 @@ +xK +1EQYEIcGn[G^ށe*@LL?Ffs0΋8I2J2ݠv.Vp.9c3E[B'9qՀr@)ѵl+_l]H \ No newline at end of file diff --git a/tests/complexnetwork.git/objects/f9/60dbfbcd8afc9d37c6a3077c31f5fc0cabee0c b/tests/complexnetwork.git/objects/f9/60dbfbcd8afc9d37c6a3077c31f5fc0cabee0c new file mode 100644 index 0000000..05012f5 Binary files /dev/null and b/tests/complexnetwork.git/objects/f9/60dbfbcd8afc9d37c6a3077c31f5fc0cabee0c differ diff --git a/tests/complexnetwork.git/objects/fa/7a50bc0cf55a97f9bdf2a2e75e7e15537477e7 b/tests/complexnetwork.git/objects/fa/7a50bc0cf55a97f9bdf2a2e75e7e15537477e7 new file mode 100644 index 0000000..ef8c19f Binary files /dev/null and b/tests/complexnetwork.git/objects/fa/7a50bc0cf55a97f9bdf2a2e75e7e15537477e7 differ diff --git a/tests/complexnetwork.git/objects/fb/6e7570645235ebe94889f95783bc0fd1f5bec6 b/tests/complexnetwork.git/objects/fb/6e7570645235ebe94889f95783bc0fd1f5bec6 new file mode 100644 index 0000000..55ce56e Binary files /dev/null and b/tests/complexnetwork.git/objects/fb/6e7570645235ebe94889f95783bc0fd1f5bec6 differ diff --git a/tests/complexnetwork.git/objects/fe/613ab22f00f45c5041697089c756fda875ac8e b/tests/complexnetwork.git/objects/fe/613ab22f00f45c5041697089c756fda875ac8e new file mode 100644 index 0000000..c4886dd Binary files /dev/null and b/tests/complexnetwork.git/objects/fe/613ab22f00f45c5041697089c756fda875ac8e differ diff --git a/tests/complexnetwork.git/objects/fe/e3923c6d9fae66a7c275b2a9d04e47db88b2eb b/tests/complexnetwork.git/objects/fe/e3923c6d9fae66a7c275b2a9d04e47db88b2eb new file mode 100644 index 0000000..495ebe0 Binary files /dev/null and b/tests/complexnetwork.git/objects/fe/e3923c6d9fae66a7c275b2a9d04e47db88b2eb differ diff --git a/tests/complexnetwork.git/refs/heads/branch1 b/tests/complexnetwork.git/refs/heads/branch1 new file mode 100644 index 0000000..ea3a5c4 --- /dev/null +++ b/tests/complexnetwork.git/refs/heads/branch1 @@ -0,0 +1 @@ +f133084691e488fdf3dcd67f0dff4df2f55fb711 diff --git a/tests/complexnetwork.git/refs/heads/branch2 b/tests/complexnetwork.git/refs/heads/branch2 new file mode 100644 index 0000000..3ef048e --- /dev/null +++ b/tests/complexnetwork.git/refs/heads/branch2 @@ -0,0 +1 @@ +fb6e7570645235ebe94889f95783bc0fd1f5bec6 diff --git a/tests/complexnetwork.git/refs/heads/branch3 b/tests/complexnetwork.git/refs/heads/branch3 new file mode 100644 index 0000000..525e064 --- /dev/null +++ b/tests/complexnetwork.git/refs/heads/branch3 @@ -0,0 +1 @@ +35b0b2d786ccd201db37b83ca8f21f7d363499af diff --git a/tests/complexnetwork.git/refs/heads/branch4 b/tests/complexnetwork.git/refs/heads/branch4 new file mode 100644 index 0000000..2fafb54 --- /dev/null +++ b/tests/complexnetwork.git/refs/heads/branch4 @@ -0,0 +1 @@ +0d58300606997e8eacf8504197c65982d0cbb8eb diff --git a/tests/complexnetwork.git/refs/heads/branch5 b/tests/complexnetwork.git/refs/heads/branch5 new file mode 100644 index 0000000..630a12d --- /dev/null +++ b/tests/complexnetwork.git/refs/heads/branch5 @@ -0,0 +1 @@ +fe613ab22f00f45c5041697089c756fda875ac8e diff --git a/tests/complexnetwork.git/refs/heads/branch6 b/tests/complexnetwork.git/refs/heads/branch6 new file mode 100644 index 0000000..7a20b9a --- /dev/null +++ b/tests/complexnetwork.git/refs/heads/branch6 @@ -0,0 +1 @@ +74071922c169dd14300d31d67f2dfa3316c5dd09 diff --git a/tests/complexnetwork.git/refs/heads/branch7 b/tests/complexnetwork.git/refs/heads/branch7 new file mode 100644 index 0000000..27032c8 --- /dev/null +++ b/tests/complexnetwork.git/refs/heads/branch7 @@ -0,0 +1 @@ +b20afdee9454ae329646b7b568b08c6065c90217 diff --git a/tests/complexnetwork.git/refs/heads/master b/tests/complexnetwork.git/refs/heads/master new file mode 100644 index 0000000..20903d8 --- /dev/null +++ b/tests/complexnetwork.git/refs/heads/master @@ -0,0 +1 @@ +f7f0860affbf5445ef0d8b5388cd9814a2063d57