85
85
CFG_SUB_NAME = 'sub-externals.cfg'
86
86
README_NAME = 'readme.txt'
87
87
REMOTE_BRANCH_FEATURE2 = 'feature2'
88
+ NESTED_NAME = ['./fred' , './fred/wilma' , './fred/wilma/barney' ]
89
+
88
90
89
91
SVN_TEST_REPO = 'https://github.com/escomp/cesm'
90
92
@@ -160,6 +162,23 @@ def container_simple_required(self, dest_dir):
160
162
161
163
self .write_config (dest_dir )
162
164
165
+ def container_nested_required (self , dest_dir , order ):
166
+ """Create a container externals file with only simple externals.
167
+
168
+ """
169
+ self .create_config ()
170
+ self .create_section (SIMPLE_REPO_NAME , 'simp_tag' , nested = True ,
171
+ tag = 'tag1' , path = NESTED_NAME [order [0 ]])
172
+
173
+ self .create_section (SIMPLE_REPO_NAME , 'simp_branch' , nested = True ,
174
+ branch = REMOTE_BRANCH_FEATURE2 , path = NESTED_NAME [order [1 ]])
175
+
176
+ self .create_section (SIMPLE_REPO_NAME , 'simp_hash' , nested = True ,
177
+ ref_hash = '60b1cc1a38d63' , path = NESTED_NAME [order [2 ]])
178
+
179
+ self .write_config (dest_dir )
180
+
181
+
163
182
def container_simple_optional (self , dest_dir ):
164
183
"""Create a container externals file with optional simple externals
165
184
@@ -261,7 +280,7 @@ def create_metadata(self):
261
280
def create_section (self , repo_type , name , tag = '' , branch = '' ,
262
281
ref_hash = '' , required = True , path = EXTERNALS_NAME ,
263
282
externals = '' , repo_path = None , from_submodule = False ,
264
- sparse = '' ):
283
+ sparse = '' , nested = False ):
265
284
# pylint: disable=too-many-branches
266
285
"""Create a config section with autofilling some items and handling
267
286
optional items.
@@ -270,8 +289,11 @@ def create_section(self, repo_type, name, tag='', branch='',
270
289
# pylint: disable=R0913
271
290
self ._config .add_section (name )
272
291
if not from_submodule :
273
- self ._config .set (name , ExternalsDescription .PATH ,
274
- os .path .join (path , name ))
292
+ if nested :
293
+ self ._config .set (name , ExternalsDescription .PATH , path )
294
+ else :
295
+ self ._config .set (name , ExternalsDescription .PATH ,
296
+ os .path .join (path , name ))
275
297
276
298
self ._config .set (name , ExternalsDescription .PROTOCOL ,
277
299
ExternalsDescription .PROTOCOL_GIT )
@@ -671,10 +693,16 @@ def _check_simple_tag_empty(self, tree, directory=EXTERNALS_NAME):
671
693
name = './{0}/simp_tag' .format (directory )
672
694
self ._check_generic_empty_default_required (tree , name )
673
695
696
+ def _check_nested_tag_empty (self , tree , name = EXTERNALS_NAME ):
697
+ self ._check_generic_empty_default_required (tree , name )
698
+
674
699
def _check_simple_tag_ok (self , tree , directory = EXTERNALS_NAME ):
675
700
name = './{0}/simp_tag' .format (directory )
676
701
self ._check_generic_ok_clean_required (tree , name )
677
702
703
+ def _check_nested_tag_ok (self , tree , name = EXTERNALS_NAME ):
704
+ self ._check_generic_ok_clean_required (tree , name )
705
+
678
706
def _check_simple_tag_dirty (self , tree , directory = EXTERNALS_NAME ):
679
707
name = './{0}/simp_tag' .format (directory )
680
708
self ._check_generic_ok_dirty_required (tree , name )
@@ -687,10 +715,16 @@ def _check_simple_branch_empty(self, tree, directory=EXTERNALS_NAME):
687
715
name = './{0}/simp_branch' .format (directory )
688
716
self ._check_generic_empty_default_required (tree , name )
689
717
718
+ def _check_nested_branch_empty (self , tree , name = EXTERNALS_NAME ):
719
+ self ._check_generic_empty_default_required (tree , name )
720
+
690
721
def _check_simple_branch_ok (self , tree , directory = EXTERNALS_NAME ):
691
722
name = './{0}/simp_branch' .format (directory )
692
723
self ._check_generic_ok_clean_required (tree , name )
693
724
725
+ def _check_nested_branch_ok (self , tree , name = EXTERNALS_NAME ):
726
+ self ._check_generic_ok_clean_required (tree , name )
727
+
694
728
def _check_simple_branch_modified (self , tree , directory = EXTERNALS_NAME ):
695
729
name = './{0}/simp_branch' .format (directory )
696
730
self ._check_generic_modified_ok_required (tree , name )
@@ -699,10 +733,16 @@ def _check_simple_hash_empty(self, tree, directory=EXTERNALS_NAME):
699
733
name = './{0}/simp_hash' .format (directory )
700
734
self ._check_generic_empty_default_required (tree , name )
701
735
736
+ def _check_nested_hash_empty (self , tree , name = EXTERNALS_NAME ):
737
+ self ._check_generic_empty_default_required (tree , name )
738
+
702
739
def _check_simple_hash_ok (self , tree , directory = EXTERNALS_NAME ):
703
740
name = './{0}/simp_hash' .format (directory )
704
741
self ._check_generic_ok_clean_required (tree , name )
705
742
743
+ def _check_nested_hash_ok (self , tree , name = EXTERNALS_NAME ):
744
+ self ._check_generic_ok_clean_required (tree , name )
745
+
706
746
def _check_simple_hash_modified (self , tree , directory = EXTERNALS_NAME ):
707
747
name = './{0}/simp_hash' .format (directory )
708
748
self ._check_generic_modified_ok_required (tree , name )
@@ -754,19 +794,38 @@ def _check_container_simple_required_pre_checkout(self, overall, tree):
754
794
self ._check_simple_branch_empty (tree )
755
795
self ._check_simple_hash_empty (tree )
756
796
797
+ def _check_container_nested_required_pre_checkout (self , overall , tree , order ):
798
+ self .assertEqual (overall , 0 )
799
+ self ._check_nested_tag_empty (tree , name = NESTED_NAME [order [0 ]])
800
+ self ._check_nested_branch_empty (tree , name = NESTED_NAME [order [1 ]])
801
+ self ._check_nested_hash_empty (tree , name = NESTED_NAME [order [2 ]])
802
+
757
803
def _check_container_simple_required_checkout (self , overall , tree ):
758
804
# Note, this is the internal tree status just before checkout
759
805
self .assertEqual (overall , 0 )
760
806
self ._check_simple_tag_empty (tree )
761
807
self ._check_simple_branch_empty (tree )
762
808
self ._check_simple_hash_empty (tree )
763
809
810
+ def _check_container_nested_required_checkout (self , overall , tree , order ):
811
+ # Note, this is the internal tree status just before checkout
812
+ self .assertEqual (overall , 0 )
813
+ self ._check_nested_tag_empty (tree , name = NESTED_NAME [order [0 ]])
814
+ self ._check_nested_branch_empty (tree , name = NESTED_NAME [order [1 ]])
815
+ self ._check_nested_hash_empty (tree , name = NESTED_NAME [order [2 ]])
816
+
764
817
def _check_container_simple_required_post_checkout (self , overall , tree ):
765
818
self .assertEqual (overall , 0 )
766
819
self ._check_simple_tag_ok (tree )
767
820
self ._check_simple_branch_ok (tree )
768
821
self ._check_simple_hash_ok (tree )
769
822
823
+ def _check_container_nested_required_post_checkout (self , overall , tree , order ):
824
+ self .assertEqual (overall , 0 )
825
+ self ._check_nested_tag_ok (tree , name = NESTED_NAME [order [0 ]])
826
+ self ._check_nested_branch_ok (tree , name = NESTED_NAME [order [1 ]])
827
+ self ._check_nested_hash_ok (tree , name = NESTED_NAME [order [2 ]])
828
+
770
829
def _check_container_simple_required_out_of_sync (self , overall , tree ):
771
830
self .assertEqual (overall , 0 )
772
831
self ._check_simple_tag_modified (tree )
@@ -964,6 +1023,37 @@ def test_container_simple_required(self):
964
1023
self .status_args )
965
1024
self ._check_container_simple_required_post_checkout (overall , tree )
966
1025
1026
+ def test_container_nested_required (self ):
1027
+ """Verify that a container with nested subrepos
1028
+ generates the correct initial status.
1029
+ Tests over all possible permutations
1030
+ """
1031
+
1032
+ orders = [[0 , 1 , 2 ], [1 , 2 , 0 ], [2 , 0 , 1 ],
1033
+ [0 , 2 , 1 ], [2 , 1 , 0 ], [1 , 0 , 2 ]]
1034
+ for n , order in enumerate (orders ):
1035
+ # create repo
1036
+ dest_dir = os .path .join (os .environ [MANIC_TEST_TMP_REPO_ROOT ],
1037
+ self ._test_id , "test" + str (n ))
1038
+ under_test_dir = self .setup_test_repo (CONTAINER_REPO_NAME ,
1039
+ dest_dir_in = dest_dir )
1040
+ self ._generator .container_nested_required (under_test_dir , order )
1041
+
1042
+ # status of empty repo
1043
+ overall , tree = self .execute_cmd_in_dir (under_test_dir ,
1044
+ self .status_args )
1045
+ self ._check_container_nested_required_pre_checkout (overall , tree , order )
1046
+
1047
+ # checkout
1048
+ overall , tree = self .execute_cmd_in_dir (under_test_dir ,
1049
+ self .checkout_args )
1050
+ self ._check_container_nested_required_checkout (overall , tree , order )
1051
+
1052
+ # status clean checked out
1053
+ overall , tree = self .execute_cmd_in_dir (under_test_dir ,
1054
+ self .status_args )
1055
+ self ._check_container_nested_required_post_checkout (overall , tree , order )
1056
+
967
1057
def test_container_simple_optional (self ):
968
1058
"""Verify that container with an optional simple subrepos
969
1059
generates the correct initial status.
@@ -1591,7 +1681,7 @@ def setUp(self):
1591
1681
"""
1592
1682
1593
1683
# Run the basic setup
1594
- super (TestSubrepoCheckout , self ).setUp ()
1684
+ super ().setUp ()
1595
1685
# create test repo
1596
1686
# We need to do this here (rather than have a static repo) because
1597
1687
# git submodules do not allow for variables in .gitmodules files
0 commit comments