55from unittest .case import skipIf
66
77import git
8+ from git .cmd import Git
89from git .compat import string_types , is_win
910from git .exc import (
1011 InvalidGitRepositoryError ,
2324from git .test .lib import with_rw_directory
2425from git .util import HIDE_WINDOWS_KNOWN_ERRORS
2526from git .util import to_native_path_linux , join_path_native
27+ import os .path as osp
2628
2729
2830# Change the configuration if possible to prevent the underlying memory manager
@@ -111,7 +113,7 @@ def _do_base_tests(self, rwrepo):
111113 else :
112114 with sm .config_writer () as writer :
113115 # 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 ))
115117 writer .set_value ('url' , new_smclone_path )
116118 writer .release ()
117119 assert sm .config_reader ().get_value ('url' ) == new_smclone_path
@@ -168,7 +170,7 @@ def _do_base_tests(self, rwrepo):
168170 #################
169171
170172 # lets update it - its a recursive one too
171- newdir = os . path .join (sm .abspath , 'dir' )
173+ newdir = osp .join (sm .abspath , 'dir' )
172174 os .makedirs (newdir )
173175
174176 # update fails if the path already exists non-empty
@@ -213,7 +215,7 @@ def _do_base_tests(self, rwrepo):
213215 csm_repopath = csm .path
214216
215217 # 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 ))
217219 with csm .config_writer () as writer :
218220 writer .set_value ('url' , new_csmclone_path )
219221 assert csm .url == new_csmclone_path
@@ -301,7 +303,7 @@ def _do_base_tests(self, rwrepo):
301303 csm .update ()
302304 assert csm .module_exists ()
303305 assert csm .exists ()
304- assert os . path .isdir (csm .module ().working_tree_dir )
306+ assert osp .isdir (csm .module ().working_tree_dir )
305307
306308 # this would work
307309 assert sm .remove (force = True , dry_run = True ) is sm
@@ -354,15 +356,15 @@ def _do_base_tests(self, rwrepo):
354356 assert nsm .module_exists ()
355357 assert nsm .exists ()
356358 # 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 ))
358360 assert len (rwrepo .submodules ) == 1
359361
360362 # add another submodule, but into the root, not as submodule
361363 osm = Submodule .add (rwrepo , osmid , csm_repopath , new_csmclone_path , Submodule .k_head_default )
362364 assert osm != nsm
363365 assert osm .module_exists ()
364366 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' ))
366368
367369 assert len (rwrepo .submodules ) == 2
368370
@@ -479,7 +481,7 @@ def test_root_module(self, rwrepo):
479481
480482 # assure we clone from a local source
481483 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 )))
483485
484486 # dry-run does nothing
485487 sm .update (recursive = False , dry_run = True , progress = prog )
@@ -513,7 +515,7 @@ def test_root_module(self, rwrepo):
513515 #================
514516 nsmn = "newsubmodule"
515517 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 ]))
517519 nsm = Submodule .add (rwrepo , nsmn , nsmp , url = subrepo_url )
518520 csmadded = rwrepo .index .commit ("Added submodule" ).hexsha # make sure we don't keep the repo reference
519521 nsm .set_parent_commit (csmadded )
@@ -535,24 +537,24 @@ def test_root_module(self, rwrepo):
535537 sm .set_parent_commit (csmadded )
536538 smp = sm .abspath
537539 assert not sm .remove (module = False ).exists ()
538- assert os . path .isdir (smp ) # module still exists
540+ assert osp .isdir (smp ) # module still exists
539541 csmremoved = rwrepo .index .commit ("Removed submodule" )
540542
541543 # an update will remove the module
542544 # not in dry_run
543545 rm .update (recursive = False , dry_run = True , force_remove = True )
544- assert os . path .isdir (smp )
546+ assert osp .isdir (smp )
545547
546548 # when removing submodules, we may get new commits as nested submodules are auto-committing changes
547549 # to allow deletions without force, as the index would be dirty otherwise.
548550 # QUESTION: Why does this seem to work in test_git_submodule_compatibility() ?
549551 self .failUnlessRaises (InvalidGitRepositoryError , rm .update , recursive = False , force_remove = False )
550552 rm .update (recursive = False , force_remove = True )
551- assert not os . path .isdir (smp )
553+ assert not osp .isdir (smp )
552554
553555 # 'apply work' to the nested submodule and assure this is not removed/altered during updates
554556 # 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' ))
556558 # We cannot expect is_dirty to even run as we wouldn't reset a head to the same location
557559 assert nsm .module ().head .commit .hexsha == nsm .hexsha
558560 nsm .module ().index .add ([nsm ])
@@ -574,7 +576,7 @@ def test_root_module(self, rwrepo):
574576 # ... to the first repository, this way we have a fast checkout, and a completely different
575577 # repository at the different url
576578 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 ]))
578580 with nsm .config_writer () as writer :
579581 writer .set_value ('url' , nsmurl )
580582 csmpathchange = rwrepo .index .commit ("changed url" )
@@ -648,21 +650,21 @@ def test_first_submodule(self, rwrepo):
648650 assert len (list (rwrepo .iter_submodules ())) == 0
649651
650652 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' ))):
652654 sm = rwrepo .create_submodule (sm_name , sm_path , rwrepo .git_dir , no_checkout = True )
653655 assert sm .exists () and sm .module_exists ()
654656 rwrepo .index .commit ("Added submodule " + sm_name )
655657 # end for each submodule path to add
656658
657- self .failUnlessRaises (ValueError , rwrepo .create_submodule , 'fail' , os . path .expanduser ('~' ))
659+ self .failUnlessRaises (ValueError , rwrepo .create_submodule , 'fail' , osp .expanduser ('~' ))
658660 self .failUnlessRaises (ValueError , rwrepo .create_submodule , 'fail-too' ,
659- rwrepo .working_tree_dir + os . path .sep )
661+ rwrepo .working_tree_dir + osp .sep )
660662
661663 @with_rw_directory
662664 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' )
664666
665- parent = git .Repo .init (os . path .join (rwdir , 'parent' ))
667+ parent = git .Repo .init (osp .join (rwdir , 'parent' ))
666668 git .Repo .init (empty_repo_dir )
667669
668670 for checkout_mode in range (2 ):
@@ -673,7 +675,7 @@ def test_add_empty_repo(self, rwdir):
673675
674676 @with_rw_directory
675677 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' ))
677679 parent .git .submodule ('add' , self ._small_repo_url (), 'module' )
678680 parent .index .commit ("added submodule" )
679681
@@ -683,7 +685,7 @@ def test_git_submodules_and_add_sm_with_new_commit(self, rwdir):
683685 assert sm .exists () and sm .module_exists ()
684686
685687 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' ))
687689 sm2 = parent .create_submodule ('nongit-file-submodule' , clone .working_tree_dir )
688690 assert len (parent .submodules ) == 2
689691
@@ -700,7 +702,7 @@ def test_git_submodules_and_add_sm_with_new_commit(self, rwdir):
700702 parent .index .commit ("moved submodules" )
701703
702704 smm = sm .module ()
703- fp = os . path .join (smm .working_tree_dir , 'empty-file' )
705+ fp = osp .join (smm .working_tree_dir , 'empty-file' )
704706 with open (fp , 'w' ):
705707 pass
706708 smm .git .add (fp )
@@ -733,7 +735,7 @@ def test_git_submodules_and_add_sm_with_new_commit(self, rwdir):
733735 # "'C:\\Users\\appveyor\\AppData\\Local\\Temp\\1\\test_work_tree_unsupportedryfa60di\\master_repo\\.git\\objects\\pack\\pack-bc9e0787aef9f69e1591ef38ea0a6f566ec66fe3.idx") # noqa E501
734736 @with_rw_directory
735737 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' ))
737739 sm_path = join_path_native ('submodules' , 'intermediate' , 'one' )
738740 sm = parent .create_submodule ('mymodules/myname' , sm_path , url = self ._small_repo_url ())
739741 parent .index .commit ("added submodule" )
@@ -747,13 +749,13 @@ def assert_exists(sm, value=True):
747749 # muss it up. That's the only reason why the test is still here ... .
748750 assert len (parent .git .submodule ().splitlines ()) == 1
749751
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 ))
752754 if not sm ._need_gitfile_submodules (parent .git ):
753- assert os . path .isdir (module_repo_path )
755+ assert osp .isdir (module_repo_path )
754756 assert not sm .module ().has_separate_working_tree ()
755757 else :
756- assert os . path .isfile (module_repo_path )
758+ assert osp .isfile (module_repo_path )
757759 assert sm .module ().has_separate_working_tree ()
758760 assert find_git_dir (module_repo_path ) is not None , "module pointed to by .git file must be valid"
759761 # end verify submodule 'style'
@@ -803,12 +805,12 @@ def assert_exists(sm, value=True):
803805 for dry_run in (True , False ):
804806 sm .remove (dry_run = dry_run , force = True )
805807 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
807809 # end for each dry-run mode
808810
809811 @with_rw_directory
810812 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' ))
812814 sm_name = 'mymodules/myname'
813815 sm = parent .create_submodule (sm_name , sm_name , url = self ._small_repo_url ())
814816 assert sm .exists ()
@@ -817,7 +819,7 @@ def test_remove_norefs(self, rwdir):
817819
818820 assert sm .repo is parent # yoh was surprised since expected sm repo!!
819821 # 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 ))
821823 # Adding a remote without fetching so would have no references
822824 smrepo .create_remote ('special' , 'git@server-shouldnotmatter:repo.git' )
823825 # And we should be able to remove it just fine
@@ -826,7 +828,7 @@ def test_remove_norefs(self, rwdir):
826828
827829 @with_rw_directory
828830 def test_rename (self , rwdir ):
829- parent = git .Repo .init (os . path .join (rwdir , 'parent' ))
831+ parent = git .Repo .init (osp .join (rwdir , 'parent' ))
830832 sm_name = 'mymodules/myname'
831833 sm = parent .create_submodule (sm_name , sm_name , url = self ._small_repo_url ())
832834 parent .index .commit ("Added submodule" )
@@ -843,7 +845,7 @@ def test_rename(self, rwdir):
843845 assert sm .exists ()
844846
845847 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 ):
847849 assert sm_mod .git_dir .endswith (join_path_native ('.git' , 'modules' , new_sm_name ))
848850 # end
849851
@@ -852,8 +854,8 @@ def test_branch_renames(self, rw_dir):
852854 # Setup initial sandbox:
853855 # parent repo has one submodule, which has all the latest changes
854856 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' ))
857859 sm = parent_repo .create_submodule ('mysubmodule' , 'subdir/submodule' ,
858860 sm_source_repo .working_tree_dir , branch = 'master' )
859861 parent_repo .index .commit ('added submodule' )
@@ -862,7 +864,7 @@ def test_branch_renames(self, rw_dir):
862864 # Create feature branch with one new commit in submodule source
863865 sm_fb = sm_source_repo .create_head ('feature' )
864866 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' ))
866868 sm_source_repo .index .add ([new_file ])
867869 sm .repo .index .commit ("added new file" )
868870
@@ -888,7 +890,7 @@ def test_branch_renames(self, rw_dir):
888890 # To make it even 'harder', we shall fork and create a new commit
889891 sm_pfb = sm_source_repo .create_head ('past-feature' , commit = 'HEAD~20' )
890892 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' ))])
892894 sm_source_repo .index .commit ("new file added, to past of '%r'" % sm_fb )
893895
894896 # Change designated submodule checkout branch to a new commit in its own past
@@ -897,7 +899,7 @@ def test_branch_renames(self, rw_dir):
897899 sm .repo .index .commit ("changed submodule branch to '%s'" % sm_pfb )
898900
899901 # 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' ))
901903 # This doesn't fail as our own submodule binsha didn't change, and the reset is only triggered if
902904 # to latest revision is True.
903905 parent_repo .submodule_update (to_latest_revision = False )
0 commit comments