2
2
# the BSD License: http://www.opensource.org/licenses/bsd-license.php
3
3
import os
4
4
import sys
5
- from unittest .case import skipIf
6
5
7
6
import git
7
+ from git .cmd import Git
8
8
from git .compat import string_types , is_win
9
9
from git .exc import (
10
10
InvalidGitRepositoryError ,
21
21
with_rw_repo
22
22
)
23
23
from git .test .lib import with_rw_directory
24
- from git .util import HIDE_WINDOWS_KNOWN_ERRORS
25
24
from git .util import to_native_path_linux , join_path_native
25
+ import os .path as osp
26
26
27
27
28
28
# Change the configuration if possible to prevent the underlying memory manager
@@ -111,7 +111,7 @@ def _do_base_tests(self, rwrepo):
111
111
else :
112
112
with sm .config_writer () as writer :
113
113
# 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 ))
114
+ new_smclone_path = Git . polish_url ( osp . join (self .rorepo .working_tree_dir , sm .path ))
115
115
writer .set_value ('url' , new_smclone_path )
116
116
writer .release ()
117
117
assert sm .config_reader ().get_value ('url' ) == new_smclone_path
@@ -168,7 +168,7 @@ def _do_base_tests(self, rwrepo):
168
168
#################
169
169
170
170
# lets update it - its a recursive one too
171
- newdir = os . path .join (sm .abspath , 'dir' )
171
+ newdir = osp .join (sm .abspath , 'dir' )
172
172
os .makedirs (newdir )
173
173
174
174
# update fails if the path already exists non-empty
@@ -213,7 +213,7 @@ def _do_base_tests(self, rwrepo):
213
213
csm_repopath = csm .path
214
214
215
215
# 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 ))
216
+ new_csmclone_path = Git . polish_url ( osp . join (self .rorepo .working_tree_dir , sm .path , csm .path ))
217
217
with csm .config_writer () as writer :
218
218
writer .set_value ('url' , new_csmclone_path )
219
219
assert csm .url == new_csmclone_path
@@ -301,7 +301,7 @@ def _do_base_tests(self, rwrepo):
301
301
csm .update ()
302
302
assert csm .module_exists ()
303
303
assert csm .exists ()
304
- assert os . path .isdir (csm .module ().working_tree_dir )
304
+ assert osp .isdir (csm .module ().working_tree_dir )
305
305
306
306
# this would work
307
307
assert sm .remove (force = True , dry_run = True ) is sm
@@ -354,15 +354,15 @@ def _do_base_tests(self, rwrepo):
354
354
assert nsm .module_exists ()
355
355
assert nsm .exists ()
356
356
# its not checked out
357
- assert not os . path .isfile (join_path_native (nsm .module ().working_tree_dir , Submodule .k_modules_file ))
357
+ assert not osp .isfile (join_path_native (nsm .module ().working_tree_dir , Submodule .k_modules_file ))
358
358
assert len (rwrepo .submodules ) == 1
359
359
360
360
# add another submodule, but into the root, not as submodule
361
361
osm = Submodule .add (rwrepo , osmid , csm_repopath , new_csmclone_path , Submodule .k_head_default )
362
362
assert osm != nsm
363
363
assert osm .module_exists ()
364
364
assert osm .exists ()
365
- assert os . path .isfile (join_path_native (osm .module ().working_tree_dir , 'setup.py' ))
365
+ assert osp .isfile (join_path_native (osm .module ().working_tree_dir , 'setup.py' ))
366
366
367
367
assert len (rwrepo .submodules ) == 2
368
368
@@ -430,11 +430,6 @@ def test_base_rw(self, rwrepo):
430
430
def test_base_bare (self , rwrepo ):
431
431
self ._do_base_tests (rwrepo )
432
432
433
- @skipIf (HIDE_WINDOWS_KNOWN_ERRORS and sys .version_info [:2 ] == (3 , 5 ), """
434
- File "C:\projects\gitpython\git\cmd.py", line 559, in execute
435
- raise GitCommandNotFound(command, err)
436
- git.exc.GitCommandNotFound: Cmd('git') not found due to: OSError('[WinError 6] The handle is invalid')
437
- cmdline: git clone -n --shared -v C:\projects\gitpython\.git Users\a ppveyor\AppData\Local\Temp\1 \t mplyp6kr_rnon_bare_test_root_module""" ) # noqa E501
438
433
@with_rw_repo (k_subm_current , bare = False )
439
434
def test_root_module (self , rwrepo ):
440
435
# Can query everything without problems
@@ -479,7 +474,7 @@ def test_root_module(self, rwrepo):
479
474
480
475
# assure we clone from a local source
481
476
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 )))
477
+ writer .set_value ('url' , Git . polish_url ( osp . join (self .rorepo .working_tree_dir , sm .path )))
483
478
484
479
# dry-run does nothing
485
480
sm .update (recursive = False , dry_run = True , progress = prog )
@@ -513,7 +508,7 @@ def test_root_module(self, rwrepo):
513
508
#================
514
509
nsmn = "newsubmodule"
515
510
nsmp = "submrepo"
516
- subrepo_url = to_native_path_linux ( join_path_native (self .rorepo .working_tree_dir , rsmsp [0 ], rsmsp [1 ]))
511
+ subrepo_url = Git . polish_url ( osp . join (self .rorepo .working_tree_dir , rsmsp [0 ], rsmsp [1 ]))
517
512
nsm = Submodule .add (rwrepo , nsmn , nsmp , url = subrepo_url )
518
513
csmadded = rwrepo .index .commit ("Added submodule" ).hexsha # make sure we don't keep the repo reference
519
514
nsm .set_parent_commit (csmadded )
@@ -535,24 +530,24 @@ def test_root_module(self, rwrepo):
535
530
sm .set_parent_commit (csmadded )
536
531
smp = sm .abspath
537
532
assert not sm .remove (module = False ).exists ()
538
- assert os . path .isdir (smp ) # module still exists
533
+ assert osp .isdir (smp ) # module still exists
539
534
csmremoved = rwrepo .index .commit ("Removed submodule" )
540
535
541
536
# an update will remove the module
542
537
# not in dry_run
543
538
rm .update (recursive = False , dry_run = True , force_remove = True )
544
- assert os . path .isdir (smp )
539
+ assert osp .isdir (smp )
545
540
546
541
# when removing submodules, we may get new commits as nested submodules are auto-committing changes
547
542
# to allow deletions without force, as the index would be dirty otherwise.
548
543
# QUESTION: Why does this seem to work in test_git_submodule_compatibility() ?
549
544
self .failUnlessRaises (InvalidGitRepositoryError , rm .update , recursive = False , force_remove = False )
550
545
rm .update (recursive = False , force_remove = True )
551
- assert not os . path .isdir (smp )
546
+ assert not osp .isdir (smp )
552
547
553
548
# 'apply work' to the nested submodule and assure this is not removed/altered during updates
554
549
# 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' ))
550
+ touch (osp .join (nsm .module ().working_tree_dir , 'new-file' ))
556
551
# We cannot expect is_dirty to even run as we wouldn't reset a head to the same location
557
552
assert nsm .module ().head .commit .hexsha == nsm .hexsha
558
553
nsm .module ().index .add ([nsm ])
@@ -574,7 +569,7 @@ def test_root_module(self, rwrepo):
574
569
# ... to the first repository, this way we have a fast checkout, and a completely different
575
570
# repository at the different url
576
571
nsm .set_parent_commit (csmremoved )
577
- nsmurl = to_native_path_linux ( join_path_native (self .rorepo .working_tree_dir , rsmsp [0 ]))
572
+ nsmurl = Git . polish_url ( osp . join (self .rorepo .working_tree_dir , rsmsp [0 ]))
578
573
with nsm .config_writer () as writer :
579
574
writer .set_value ('url' , nsmurl )
580
575
csmpathchange = rwrepo .index .commit ("changed url" )
@@ -648,21 +643,21 @@ def test_first_submodule(self, rwrepo):
648
643
assert len (list (rwrepo .iter_submodules ())) == 0
649
644
650
645
for sm_name , sm_path in (('first' , 'submodules/first' ),
651
- ('second' , os . path .join (rwrepo .working_tree_dir , 'submodules/second' ))):
646
+ ('second' , osp .join (rwrepo .working_tree_dir , 'submodules/second' ))):
652
647
sm = rwrepo .create_submodule (sm_name , sm_path , rwrepo .git_dir , no_checkout = True )
653
648
assert sm .exists () and sm .module_exists ()
654
649
rwrepo .index .commit ("Added submodule " + sm_name )
655
650
# end for each submodule path to add
656
651
657
- self .failUnlessRaises (ValueError , rwrepo .create_submodule , 'fail' , os . path .expanduser ('~' ))
652
+ self .failUnlessRaises (ValueError , rwrepo .create_submodule , 'fail' , osp .expanduser ('~' ))
658
653
self .failUnlessRaises (ValueError , rwrepo .create_submodule , 'fail-too' ,
659
- rwrepo .working_tree_dir + os . path .sep )
654
+ rwrepo .working_tree_dir + osp .sep )
660
655
661
656
@with_rw_directory
662
657
def test_add_empty_repo (self , rwdir ):
663
- empty_repo_dir = os . path .join (rwdir , 'empty-repo' )
658
+ empty_repo_dir = osp .join (rwdir , 'empty-repo' )
664
659
665
- parent = git .Repo .init (os . path .join (rwdir , 'parent' ))
660
+ parent = git .Repo .init (osp .join (rwdir , 'parent' ))
666
661
git .Repo .init (empty_repo_dir )
667
662
668
663
for checkout_mode in range (2 ):
@@ -673,7 +668,7 @@ def test_add_empty_repo(self, rwdir):
673
668
674
669
@with_rw_directory
675
670
def test_git_submodules_and_add_sm_with_new_commit (self , rwdir ):
676
- parent = git .Repo .init (os . path .join (rwdir , 'parent' ))
671
+ parent = git .Repo .init (osp .join (rwdir , 'parent' ))
677
672
parent .git .submodule ('add' , self ._small_repo_url (), 'module' )
678
673
parent .index .commit ("added submodule" )
679
674
@@ -683,7 +678,7 @@ def test_git_submodules_and_add_sm_with_new_commit(self, rwdir):
683
678
assert sm .exists () and sm .module_exists ()
684
679
685
680
clone = git .Repo .clone_from (self ._small_repo_url (),
686
- os . path .join (parent .working_tree_dir , 'existing-subrepository' ))
681
+ osp .join (parent .working_tree_dir , 'existing-subrepository' ))
687
682
sm2 = parent .create_submodule ('nongit-file-submodule' , clone .working_tree_dir )
688
683
assert len (parent .submodules ) == 2
689
684
@@ -700,7 +695,7 @@ def test_git_submodules_and_add_sm_with_new_commit(self, rwdir):
700
695
parent .index .commit ("moved submodules" )
701
696
702
697
smm = sm .module ()
703
- fp = os . path .join (smm .working_tree_dir , 'empty-file' )
698
+ fp = osp .join (smm .working_tree_dir , 'empty-file' )
704
699
with open (fp , 'w' ):
705
700
pass
706
701
smm .git .add (fp )
@@ -733,7 +728,7 @@ def test_git_submodules_and_add_sm_with_new_commit(self, rwdir):
733
728
# "'C:\\Users\\appveyor\\AppData\\Local\\Temp\\1\\test_work_tree_unsupportedryfa60di\\master_repo\\.git\\objects\\pack\\pack-bc9e0787aef9f69e1591ef38ea0a6f566ec66fe3.idx") # noqa E501
734
729
@with_rw_directory
735
730
def test_git_submodule_compatibility (self , rwdir ):
736
- parent = git .Repo .init (os . path .join (rwdir , 'parent' ))
731
+ parent = git .Repo .init (osp .join (rwdir , 'parent' ))
737
732
sm_path = join_path_native ('submodules' , 'intermediate' , 'one' )
738
733
sm = parent .create_submodule ('mymodules/myname' , sm_path , url = self ._small_repo_url ())
739
734
parent .index .commit ("added submodule" )
@@ -747,13 +742,13 @@ def assert_exists(sm, value=True):
747
742
# muss it up. That's the only reason why the test is still here ... .
748
743
assert len (parent .git .submodule ().splitlines ()) == 1
749
744
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 ))
745
+ module_repo_path = osp .join (sm .module ().working_tree_dir , '.git' )
746
+ assert module_repo_path .startswith (osp .join (parent .working_tree_dir , sm_path ))
752
747
if not sm ._need_gitfile_submodules (parent .git ):
753
- assert os . path .isdir (module_repo_path )
748
+ assert osp .isdir (module_repo_path )
754
749
assert not sm .module ().has_separate_working_tree ()
755
750
else :
756
- assert os . path .isfile (module_repo_path )
751
+ assert osp .isfile (module_repo_path )
757
752
assert sm .module ().has_separate_working_tree ()
758
753
assert find_git_dir (module_repo_path ) is not None , "module pointed to by .git file must be valid"
759
754
# end verify submodule 'style'
@@ -803,12 +798,12 @@ def assert_exists(sm, value=True):
803
798
for dry_run in (True , False ):
804
799
sm .remove (dry_run = dry_run , force = True )
805
800
assert_exists (sm , value = dry_run )
806
- assert os . path .isdir (sm_module_path ) == dry_run
801
+ assert osp .isdir (sm_module_path ) == dry_run
807
802
# end for each dry-run mode
808
803
809
804
@with_rw_directory
810
805
def test_remove_norefs (self , rwdir ):
811
- parent = git .Repo .init (os . path .join (rwdir , 'parent' ))
806
+ parent = git .Repo .init (osp .join (rwdir , 'parent' ))
812
807
sm_name = 'mymodules/myname'
813
808
sm = parent .create_submodule (sm_name , sm_name , url = self ._small_repo_url ())
814
809
assert sm .exists ()
@@ -817,7 +812,7 @@ def test_remove_norefs(self, rwdir):
817
812
818
813
assert sm .repo is parent # yoh was surprised since expected sm repo!!
819
814
# so created a new instance for submodule
820
- smrepo = git .Repo (os . path .join (rwdir , 'parent' , sm .path ))
815
+ smrepo = git .Repo (osp .join (rwdir , 'parent' , sm .path ))
821
816
# Adding a remote without fetching so would have no references
822
817
smrepo .create_remote ('special' , 'git@server-shouldnotmatter:repo.git' )
823
818
# And we should be able to remove it just fine
@@ -826,7 +821,7 @@ def test_remove_norefs(self, rwdir):
826
821
827
822
@with_rw_directory
828
823
def test_rename (self , rwdir ):
829
- parent = git .Repo .init (os . path .join (rwdir , 'parent' ))
824
+ parent = git .Repo .init (osp .join (rwdir , 'parent' ))
830
825
sm_name = 'mymodules/myname'
831
826
sm = parent .create_submodule (sm_name , sm_name , url = self ._small_repo_url ())
832
827
parent .index .commit ("Added submodule" )
@@ -843,7 +838,7 @@ def test_rename(self, rwdir):
843
838
assert sm .exists ()
844
839
845
840
sm_mod = sm .module ()
846
- if os . path . isfile (os . path .join (sm_mod .working_tree_dir , '.git' )) == sm ._need_gitfile_submodules (parent .git ):
841
+ if osp . isfile (osp .join (sm_mod .working_tree_dir , '.git' )) == sm ._need_gitfile_submodules (parent .git ):
847
842
assert sm_mod .git_dir .endswith (join_path_native ('.git' , 'modules' , new_sm_name ))
848
843
# end
849
844
@@ -852,8 +847,8 @@ def test_branch_renames(self, rw_dir):
852
847
# Setup initial sandbox:
853
848
# parent repo has one submodule, which has all the latest changes
854
849
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' ))
850
+ sm_source_repo = git .Repo .clone_from (source_url , osp .join (rw_dir , 'sm-source' ), b = 'master' )
851
+ parent_repo = git .Repo .init (osp .join (rw_dir , 'parent' ))
857
852
sm = parent_repo .create_submodule ('mysubmodule' , 'subdir/submodule' ,
858
853
sm_source_repo .working_tree_dir , branch = 'master' )
859
854
parent_repo .index .commit ('added submodule' )
@@ -862,7 +857,7 @@ def test_branch_renames(self, rw_dir):
862
857
# Create feature branch with one new commit in submodule source
863
858
sm_fb = sm_source_repo .create_head ('feature' )
864
859
sm_fb .checkout ()
865
- new_file = touch (os . path .join (sm_source_repo .working_tree_dir , 'new-file' ))
860
+ new_file = touch (osp .join (sm_source_repo .working_tree_dir , 'new-file' ))
866
861
sm_source_repo .index .add ([new_file ])
867
862
sm .repo .index .commit ("added new file" )
868
863
@@ -888,7 +883,7 @@ def test_branch_renames(self, rw_dir):
888
883
# To make it even 'harder', we shall fork and create a new commit
889
884
sm_pfb = sm_source_repo .create_head ('past-feature' , commit = 'HEAD~20' )
890
885
sm_pfb .checkout ()
891
- sm_source_repo .index .add ([touch (os . path .join (sm_source_repo .working_tree_dir , 'new-file' ))])
886
+ sm_source_repo .index .add ([touch (osp .join (sm_source_repo .working_tree_dir , 'new-file' ))])
892
887
sm_source_repo .index .commit ("new file added, to past of '%r'" % sm_fb )
893
888
894
889
# Change designated submodule checkout branch to a new commit in its own past
@@ -897,7 +892,7 @@ def test_branch_renames(self, rw_dir):
897
892
sm .repo .index .commit ("changed submodule branch to '%s'" % sm_pfb )
898
893
899
894
# Test submodule updates - must fail if submodule is dirty
900
- touch (os . path .join (sm_mod .working_tree_dir , 'unstaged file' ))
895
+ touch (osp .join (sm_mod .working_tree_dir , 'unstaged file' ))
901
896
# This doesn't fail as our own submodule binsha didn't change, and the reset is only triggered if
902
897
# to latest revision is True.
903
898
parent_repo .submodule_update (to_latest_revision = False )
0 commit comments