@@ -28,16 +28,22 @@ def __init__(self, path: Path) -> None:
28
28
self .repo .index .add (self .repo .untracked_files )
29
29
self .repo .index .commit ("init" )
30
30
31
+ self ._default_branch = _get_default_branch (self .repo )
32
+
33
+ @property
34
+ def _default_head (self ):
35
+ return self .repo .heads .__getattr__ (self ._default_branch )
36
+
31
37
@property
32
38
def current_version (self ):
33
39
return _commit_to_version (self .repo .head .commit )
34
40
35
41
def is_latest (self , version : Optional [Version ] = None ) -> bool :
36
- return (version or self .current_version ).id == self .repo . heads . main .commit .hexsha
42
+ return (version or self .current_version ).id == self ._default_head .commit .hexsha
37
43
38
44
@property
39
45
def versions (self ):
40
- return [_commit_to_version (commit ) for commit in self .repo .iter_commits (self .repo . heads . main )]
46
+ return [_commit_to_version (commit ) for commit in self .repo .iter_commits (self ._default_head )]
41
47
42
48
@property
43
49
def has_changes (self ):
@@ -52,8 +58,8 @@ def create_version(self, name: str):
52
58
return new_version
53
59
54
60
def jump_to (self , version : Union [Version , Literal ["latest" ]]):
55
- if version == "latest" or version .id == self .repo . heads . main .commit .hexsha and not self .is_latest ():
56
- self .repo .head .reference = self .repo . heads . main # type: ignore
61
+ if version == "latest" or version .id == self ._default_head .commit .hexsha and not self .is_latest ():
62
+ self .repo .head .reference = self ._default_head # type: ignore
57
63
self .discard_changes ()
58
64
elif self .repo .head .commit .hexsha != version .id :
59
65
self .repo .head .reference = self .repo .rev_parse (version .id ) # type: ignore
@@ -73,3 +79,11 @@ def unstash(self):
73
79
74
80
def _commit_to_version (commit : Commit ) -> Version :
75
81
return Version (name = str (commit .message ), id = commit .hexsha )
82
+
83
+
84
+ def _get_default_branch (repo : Repo ):
85
+ with repo .config_reader () as reader :
86
+ possible_heads = [head .name for head in repo .heads ]
87
+ global_default = str (reader .get_value ("init" , "defaultBranch" )).strip ('"' )
88
+
89
+ return global_default if global_default in possible_heads else possible_heads .pop ()
0 commit comments