5
5
from unittest .case import skipIf
6
6
7
7
import git
8
+ from git .cmd import Git
8
9
from git .compat import string_types , is_win
9
10
from git .exc import (
10
11
InvalidGitRepositoryError ,
23
24
from git .test .lib import with_rw_directory
24
25
from git .util import HIDE_WINDOWS_KNOWN_ERRORS
25
26
from git .util import to_native_path_linux , join_path_native
27
+ import os .path as osp
26
28
27
29
28
30
# Change the configuration if possible to prevent the underlying memory manager
@@ -111,7 +113,7 @@ def _do_base_tests(self, rwrepo):
111
113
else :
112
114
with sm .config_writer () as writer :
113
115
# for faster checkout, set the url to the local path
114
- new_smclone_path = to_native_path_linux ( join_path_native (self .rorepo .working_tree_dir , sm .path ))
116
+ new_smclone_path = Git . polish_url ( osp . join (self .rorepo .working_tree_dir , sm .path ))
115
117
writer .set_value ('url' , new_smclone_path )
116
118
writer .release ()
117
119
assert sm .config_reader ().get_value ('url' ) == new_smclone_path
@@ -168,7 +170,7 @@ def _do_base_tests(self, rwrepo):
168
170
#################
169
171
170
172
# lets update it - its a recursive one too
171
- newdir = os . path .join (sm .abspath , 'dir' )
173
+ newdir = osp .join (sm .abspath , 'dir' )
172
174
os .makedirs (newdir )
173
175
174
176
# update fails if the path already exists non-empty
@@ -213,7 +215,7 @@ def _do_base_tests(self, rwrepo):
213
215
csm_repopath = csm .path
214
216
215
217
# adjust the path of the submodules module to point to the local destination
216
- new_csmclone_path = to_native_path_linux ( join_path_native (self .rorepo .working_tree_dir , sm .path , csm .path ))
218
+ new_csmclone_path = Git . polish_url ( osp . join (self .rorepo .working_tree_dir , sm .path , csm .path ))
217
219
with csm .config_writer () as writer :
218
220
writer .set_value ('url' , new_csmclone_path )
219
221
assert csm .url == new_csmclone_path
@@ -301,7 +303,7 @@ def _do_base_tests(self, rwrepo):
301
303
csm .update ()
302
304
assert csm .module_exists ()
303
305
assert csm .exists ()
304
- assert os . path .isdir (csm .module ().working_tree_dir )
306
+ assert osp .isdir (csm .module ().working_tree_dir )
305
307
306
308
# this would work
307
309
assert sm .remove (force = True , dry_run = True ) is sm
@@ -354,15 +356,15 @@ def _do_base_tests(self, rwrepo):
354
356
assert nsm .module_exists ()
355
357
assert nsm .exists ()
356
358
# its not checked out
357
- assert not os . path .isfile (join_path_native (nsm .module ().working_tree_dir , Submodule .k_modules_file ))
359
+ assert not osp .isfile (join_path_native (nsm .module ().working_tree_dir , Submodule .k_modules_file ))
358
360
assert len (rwrepo .submodules ) == 1
359
361
360
362
# add another submodule, but into the root, not as submodule
361
363
osm = Submodule .add (rwrepo , osmid , csm_repopath , new_csmclone_path , Submodule .k_head_default )
362
364
assert osm != nsm
363
365
assert osm .module_exists ()
364
366
assert osm .exists ()
365
- assert os . path .isfile (join_path_native (osm .module ().working_tree_dir , 'setup.py' ))
367
+ assert osp .isfile (join_path_native (osm .module ().working_tree_dir , 'setup.py' ))
366
368
367
369
assert len (rwrepo .submodules ) == 2
368
370
@@ -479,7 +481,7 @@ def test_root_module(self, rwrepo):
479
481
480
482
# assure we clone from a local source
481
483
with sm .config_writer () as writer :
482
- writer .set_value ('url' , to_native_path_linux ( join_path_native (self .rorepo .working_tree_dir , sm .path )))
484
+ writer .set_value ('url' , Git . polish_url ( osp . join (self .rorepo .working_tree_dir , sm .path )))
483
485
484
486
# dry-run does nothing
485
487
sm .update (recursive = False , dry_run = True , progress = prog )
@@ -513,7 +515,7 @@ def test_root_module(self, rwrepo):
513
515
#================
514
516
nsmn = "newsubmodule"
515
517
nsmp = "submrepo"
516
- subrepo_url = to_native_path_linux ( join_path_native (self .rorepo .working_tree_dir , rsmsp [0 ], rsmsp [1 ]))
518
+ subrepo_url = Git . polish_url ( osp . join (self .rorepo .working_tree_dir , rsmsp [0 ], rsmsp [1 ]))
517
519
nsm = Submodule .add (rwrepo , nsmn , nsmp , url = subrepo_url )
518
520
csmadded = rwrepo .index .commit ("Added submodule" ).hexsha # make sure we don't keep the repo reference
519
521
nsm .set_parent_commit (csmadded )
@@ -535,24 +537,24 @@ def test_root_module(self, rwrepo):
535
537
sm .set_parent_commit (csmadded )
536
538
smp = sm .abspath
537
539
assert not sm .remove (module = False ).exists ()
538
- assert os . path .isdir (smp ) # module still exists
540
+ assert osp .isdir (smp ) # module still exists
539
541
csmremoved = rwrepo .index .commit ("Removed submodule" )
540
542
541
543
# an update will remove the module
542
544
# not in dry_run
543
545
rm .update (recursive = False , dry_run = True , force_remove = True )
544
- assert os . path .isdir (smp )
546
+ assert osp .isdir (smp )
545
547
546
548
# when removing submodules, we may get new commits as nested submodules are auto-committing changes
547
549
# to allow deletions without force, as the index would be dirty otherwise.
548
550
# QUESTION: Why does this seem to work in test_git_submodule_compatibility() ?
549
551
self .failUnlessRaises (InvalidGitRepositoryError , rm .update , recursive = False , force_remove = False )
550
552
rm .update (recursive = False , force_remove = True )
551
- assert not os . path .isdir (smp )
553
+ assert not osp .isdir (smp )
552
554
553
555
# 'apply work' to the nested submodule and assure this is not removed/altered during updates
554
556
# Need to commit first, otherwise submodule.update wouldn't have a reason to change the head
555
- touch (os . path .join (nsm .module ().working_tree_dir , 'new-file' ))
557
+ touch (osp .join (nsm .module ().working_tree_dir , 'new-file' ))
556
558
# We cannot expect is_dirty to even run as we wouldn't reset a head to the same location
557
559
assert nsm .module ().head .commit .hexsha == nsm .hexsha
558
560
nsm .module ().index .add ([nsm ])
@@ -574,7 +576,7 @@ def test_root_module(self, rwrepo):
574
576
# ... to the first repository, this way we have a fast checkout, and a completely different
575
577
# repository at the different url
576
578
nsm .set_parent_commit (csmremoved )
577
- nsmurl = to_native_path_linux ( join_path_native (self .rorepo .working_tree_dir , rsmsp [0 ]))
579
+ nsmurl = Git . polish_url ( osp . join (self .rorepo .working_tree_dir , rsmsp [0 ]))
578
580
with nsm .config_writer () as writer :
579
581
writer .set_value ('url' , nsmurl )
580
582
csmpathchange = rwrepo .index .commit ("changed url" )
@@ -648,21 +650,21 @@ def test_first_submodule(self, rwrepo):
648
650
assert len (list (rwrepo .iter_submodules ())) == 0
649
651
650
652
for sm_name , sm_path in (('first' , 'submodules/first' ),
651
- ('second' , os . path .join (rwrepo .working_tree_dir , 'submodules/second' ))):
653
+ ('second' , osp .join (rwrepo .working_tree_dir , 'submodules/second' ))):
652
654
sm = rwrepo .create_submodule (sm_name , sm_path , rwrepo .git_dir , no_checkout = True )
653
655
assert sm .exists () and sm .module_exists ()
654
656
rwrepo .index .commit ("Added submodule " + sm_name )
655
657
# end for each submodule path to add
656
658
657
- self .failUnlessRaises (ValueError , rwrepo .create_submodule , 'fail' , os . path .expanduser ('~' ))
659
+ self .failUnlessRaises (ValueError , rwrepo .create_submodule , 'fail' , osp .expanduser ('~' ))
658
660
self .failUnlessRaises (ValueError , rwrepo .create_submodule , 'fail-too' ,
659
- rwrepo .working_tree_dir + os . path .sep )
661
+ rwrepo .working_tree_dir + osp .sep )
660
662
661
663
@with_rw_directory
662
664
def test_add_empty_repo (self , rwdir ):
663
- empty_repo_dir = os . path .join (rwdir , 'empty-repo' )
665
+ empty_repo_dir = osp .join (rwdir , 'empty-repo' )
664
666
665
- parent = git .Repo .init (os . path .join (rwdir , 'parent' ))
667
+ parent = git .Repo .init (osp .join (rwdir , 'parent' ))
666
668
git .Repo .init (empty_repo_dir )
667
669
668
670
for checkout_mode in range (2 ):
@@ -673,7 +675,7 @@ def test_add_empty_repo(self, rwdir):
673
675
674
676
@with_rw_directory
675
677
def test_git_submodules_and_add_sm_with_new_commit (self , rwdir ):
676
- parent = git .Repo .init (os . path .join (rwdir , 'parent' ))
678
+ parent = git .Repo .init (osp .join (rwdir , 'parent' ))
677
679
parent .git .submodule ('add' , self ._small_repo_url (), 'module' )
678
680
parent .index .commit ("added submodule" )
679
681
@@ -683,7 +685,7 @@ def test_git_submodules_and_add_sm_with_new_commit(self, rwdir):
683
685
assert sm .exists () and sm .module_exists ()
684
686
685
687
clone = git .Repo .clone_from (self ._small_repo_url (),
686
- os . path .join (parent .working_tree_dir , 'existing-subrepository' ))
688
+ osp .join (parent .working_tree_dir , 'existing-subrepository' ))
687
689
sm2 = parent .create_submodule ('nongit-file-submodule' , clone .working_tree_dir )
688
690
assert len (parent .submodules ) == 2
689
691
@@ -700,7 +702,7 @@ def test_git_submodules_and_add_sm_with_new_commit(self, rwdir):
700
702
parent .index .commit ("moved submodules" )
701
703
702
704
smm = sm .module ()
703
- fp = os . path .join (smm .working_tree_dir , 'empty-file' )
705
+ fp = osp .join (smm .working_tree_dir , 'empty-file' )
704
706
with open (fp , 'w' ):
705
707
pass
706
708
smm .git .add (fp )
@@ -733,7 +735,7 @@ def test_git_submodules_and_add_sm_with_new_commit(self, rwdir):
733
735
# "'C:\\Users\\appveyor\\AppData\\Local\\Temp\\1\\test_work_tree_unsupportedryfa60di\\master_repo\\.git\\objects\\pack\\pack-bc9e0787aef9f69e1591ef38ea0a6f566ec66fe3.idx") # noqa E501
734
736
@with_rw_directory
735
737
def test_git_submodule_compatibility (self , rwdir ):
736
- parent = git .Repo .init (os . path .join (rwdir , 'parent' ))
738
+ parent = git .Repo .init (osp .join (rwdir , 'parent' ))
737
739
sm_path = join_path_native ('submodules' , 'intermediate' , 'one' )
738
740
sm = parent .create_submodule ('mymodules/myname' , sm_path , url = self ._small_repo_url ())
739
741
parent .index .commit ("added submodule" )
@@ -747,13 +749,13 @@ def assert_exists(sm, value=True):
747
749
# muss it up. That's the only reason why the test is still here ... .
748
750
assert len (parent .git .submodule ().splitlines ()) == 1
749
751
750
- module_repo_path = os . path .join (sm .module ().working_tree_dir , '.git' )
751
- assert module_repo_path .startswith (os . path .join (parent .working_tree_dir , sm_path ))
752
+ module_repo_path = osp .join (sm .module ().working_tree_dir , '.git' )
753
+ assert module_repo_path .startswith (osp .join (parent .working_tree_dir , sm_path ))
752
754
if not sm ._need_gitfile_submodules (parent .git ):
753
- assert os . path .isdir (module_repo_path )
755
+ assert osp .isdir (module_repo_path )
754
756
assert not sm .module ().has_separate_working_tree ()
755
757
else :
756
- assert os . path .isfile (module_repo_path )
758
+ assert osp .isfile (module_repo_path )
757
759
assert sm .module ().has_separate_working_tree ()
758
760
assert find_git_dir (module_repo_path ) is not None , "module pointed to by .git file must be valid"
759
761
# end verify submodule 'style'
@@ -803,12 +805,12 @@ def assert_exists(sm, value=True):
803
805
for dry_run in (True , False ):
804
806
sm .remove (dry_run = dry_run , force = True )
805
807
assert_exists (sm , value = dry_run )
806
- assert os . path .isdir (sm_module_path ) == dry_run
808
+ assert osp .isdir (sm_module_path ) == dry_run
807
809
# end for each dry-run mode
808
810
809
811
@with_rw_directory
810
812
def test_remove_norefs (self , rwdir ):
811
- parent = git .Repo .init (os . path .join (rwdir , 'parent' ))
813
+ parent = git .Repo .init (osp .join (rwdir , 'parent' ))
812
814
sm_name = 'mymodules/myname'
813
815
sm = parent .create_submodule (sm_name , sm_name , url = self ._small_repo_url ())
814
816
assert sm .exists ()
@@ -817,7 +819,7 @@ def test_remove_norefs(self, rwdir):
817
819
818
820
assert sm .repo is parent # yoh was surprised since expected sm repo!!
819
821
# so created a new instance for submodule
820
- smrepo = git .Repo (os . path .join (rwdir , 'parent' , sm .path ))
822
+ smrepo = git .Repo (osp .join (rwdir , 'parent' , sm .path ))
821
823
# Adding a remote without fetching so would have no references
822
824
smrepo .create_remote ('special' , 'git@server-shouldnotmatter:repo.git' )
823
825
# And we should be able to remove it just fine
@@ -826,7 +828,7 @@ def test_remove_norefs(self, rwdir):
826
828
827
829
@with_rw_directory
828
830
def test_rename (self , rwdir ):
829
- parent = git .Repo .init (os . path .join (rwdir , 'parent' ))
831
+ parent = git .Repo .init (osp .join (rwdir , 'parent' ))
830
832
sm_name = 'mymodules/myname'
831
833
sm = parent .create_submodule (sm_name , sm_name , url = self ._small_repo_url ())
832
834
parent .index .commit ("Added submodule" )
@@ -843,7 +845,7 @@ def test_rename(self, rwdir):
843
845
assert sm .exists ()
844
846
845
847
sm_mod = sm .module ()
846
- if os . path . isfile (os . path .join (sm_mod .working_tree_dir , '.git' )) == sm ._need_gitfile_submodules (parent .git ):
848
+ if osp . isfile (osp .join (sm_mod .working_tree_dir , '.git' )) == sm ._need_gitfile_submodules (parent .git ):
847
849
assert sm_mod .git_dir .endswith (join_path_native ('.git' , 'modules' , new_sm_name ))
848
850
# end
849
851
@@ -852,8 +854,8 @@ def test_branch_renames(self, rw_dir):
852
854
# Setup initial sandbox:
853
855
# parent repo has one submodule, which has all the latest changes
854
856
source_url = self ._small_repo_url ()
855
- sm_source_repo = git .Repo .clone_from (source_url , os . path .join (rw_dir , 'sm-source' ), b = 'master' )
856
- parent_repo = git .Repo .init (os . path .join (rw_dir , 'parent' ))
857
+ sm_source_repo = git .Repo .clone_from (source_url , osp .join (rw_dir , 'sm-source' ), b = 'master' )
858
+ parent_repo = git .Repo .init (osp .join (rw_dir , 'parent' ))
857
859
sm = parent_repo .create_submodule ('mysubmodule' , 'subdir/submodule' ,
858
860
sm_source_repo .working_tree_dir , branch = 'master' )
859
861
parent_repo .index .commit ('added submodule' )
@@ -862,7 +864,7 @@ def test_branch_renames(self, rw_dir):
862
864
# Create feature branch with one new commit in submodule source
863
865
sm_fb = sm_source_repo .create_head ('feature' )
864
866
sm_fb .checkout ()
865
- new_file = touch (os . path .join (sm_source_repo .working_tree_dir , 'new-file' ))
867
+ new_file = touch (osp .join (sm_source_repo .working_tree_dir , 'new-file' ))
866
868
sm_source_repo .index .add ([new_file ])
867
869
sm .repo .index .commit ("added new file" )
868
870
@@ -888,7 +890,7 @@ def test_branch_renames(self, rw_dir):
888
890
# To make it even 'harder', we shall fork and create a new commit
889
891
sm_pfb = sm_source_repo .create_head ('past-feature' , commit = 'HEAD~20' )
890
892
sm_pfb .checkout ()
891
- sm_source_repo .index .add ([touch (os . path .join (sm_source_repo .working_tree_dir , 'new-file' ))])
893
+ sm_source_repo .index .add ([touch (osp .join (sm_source_repo .working_tree_dir , 'new-file' ))])
892
894
sm_source_repo .index .commit ("new file added, to past of '%r'" % sm_fb )
893
895
894
896
# Change designated submodule checkout branch to a new commit in its own past
@@ -897,7 +899,7 @@ def test_branch_renames(self, rw_dir):
897
899
sm .repo .index .commit ("changed submodule branch to '%s'" % sm_pfb )
898
900
899
901
# Test submodule updates - must fail if submodule is dirty
900
- touch (os . path .join (sm_mod .working_tree_dir , 'unstaged file' ))
902
+ touch (osp .join (sm_mod .working_tree_dir , 'unstaged file' ))
901
903
# This doesn't fail as our own submodule binsha didn't change, and the reset is only triggered if
902
904
# to latest revision is True.
903
905
parent_repo .submodule_update (to_latest_revision = False )
0 commit comments