Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Version
Manage
Activity
Members
Plan
Jira
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Analyze
Contributor analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
OSS
Utilities
Version
Commits
1c89edd8
Verified
Commit
1c89edd8
authored
1 year ago
by
Volker Schukai
Browse files
Options
Downloads
Patches
Plain Diff
fix: the tags are now processed branch-related #15
parent
ee709a36
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
README.md
+0
-1
0 additions, 1 deletion
README.md
source/commandline.go
+7
-0
7 additions, 0 deletions
source/commandline.go
source/git.go
+77
-70
77 additions, 70 deletions
source/git.go
with
84 additions
and
71 deletions
README.md
+
0
−
1
View file @
1c89edd8
...
...
@@ -101,7 +101,6 @@ version predict
**Makefile**
```
makefile
build
:
version
patch
--path
$(PROJECT_ROOT)version.json
--selector
"version"
$(eval VERSION
:
= $(shell cat version.json | jq -r .version))
...
...
This diff is collapsed.
Click to expand it.
source/commandline.go
+
7
−
0
View file @
1c89edd8
...
...
@@ -264,6 +264,13 @@ func executeCommand() {
err
=
writeVersion
(
newVersion
)
if
err
!=
nil
{
if
activeCommand
.
Name
==
"auto"
||
activeCommand
.
Name
==
"predict"
{
if
arguments
.
Auto
.
ExitCode
||
arguments
.
Predict
.
ExitCode
{
os
.
Exit
(
10
)
}
}
_
,
err
:=
fmt
.
Fprintf
(
os
.
Stderr
,
"Error: %s
\n
"
,
err
)
if
err
!=
nil
{
fmt
.
Printf
(
"Error: %s
\n
"
,
err
)
...
...
This diff is collapsed.
Click to expand it.
source/git.go
+
77
−
70
View file @
1c89edd8
...
...
@@ -90,7 +90,7 @@ func GetCommitType() (CommitType, error) {
fmt
.
Println
(
"tag commit:"
,
tagCommit
)
}
commitType
,
err
:=
getCommitTypeSinceTag
(
tagCommit
)
commitType
,
err
:=
findNextTagType
(
gitRepo
,
tagCommit
,
verbosity
)
if
err
!=
nil
{
return
OtherCommit
,
err
}
...
...
@@ -103,7 +103,7 @@ func GetCommitType() (CommitType, error) {
}
func
getLatestSemanticTag
()
(
SemanticVersion
,
error
)
{
tagList
,
err
:=
getSemanticTags
()
tagList
,
err
:=
getSemanticTags
(
gitRepo
)
if
err
!=
nil
{
return
SemanticVersion
{},
err
}
...
...
@@ -124,51 +124,66 @@ func getTagCommit(tag string) (*object.Commit, error) {
return
nil
,
fmt
.
Errorf
(
"failed to get tags: %v"
,
err
)
}
var
tagC
ommit
*
object
.
Commit
var
c
ommit
Hash
*
object
.
Commit
err
=
tags
.
ForEach
(
func
(
t
*
plumbing
.
Reference
)
error
{
if
t
.
Name
()
.
Short
()
==
tag
{
if
t
.
Name
()
.
Short
()
!=
tag
{
return
nil
}
tagObj
,
err
:=
r
.
TagObject
(
t
.
Hash
())
if
err
==
plumbing
.
ErrObjectNotFound
{
commit
,
err
:=
r
.
CommitObject
(
t
.
Hash
())
if
err
!=
nil
{
return
err
}
tagCommit
=
commit
}
else
if
err
!=
nil
{
return
err
}
else
{
tagCommit
,
err
=
tagObj
.
Commit
()
if
err
!=
nil
{
return
err
}
}
return
ErrStopIteration
// Resolve the tag to a commit
obj
,
err
:=
r
.
TagObject
(
t
.
Hash
())
var
hash
plumbing
.
Hash
if
err
==
nil
{
// This is an annotated tag
hash
=
obj
.
Target
}
else
{
// This is a lightweight tag or an error occurred
hash
=
t
.
Hash
()
}
return
nil
commitHash
,
err
=
r
.
CommitObject
(
hash
)
return
ErrStopIteration
})
if
err
!=
nil
&&
err
!=
ErrStopIteration
{
return
nil
,
fmt
.
Errorf
(
"failed to iterate over tags: %v"
,
err
)
}
if
tagC
ommit
==
nil
{
if
c
ommit
Hash
==
nil
{
return
nil
,
fmt
.
Errorf
(
"tag '%s' not found in commit log"
,
tag
)
}
return
tagC
ommit
,
nil
return
c
ommit
Hash
,
nil
}
func
getSemanticTags
()
([]
SemanticVersion
,
error
)
{
r
:=
gitRepo
func
getSemanticTags
(
r
*
git
.
Repository
)
([]
SemanticVersion
,
error
)
{
tags
,
err
:=
r
.
Tags
()
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to get tags: %v"
,
err
)
}
headRef
,
err
:=
r
.
Head
()
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to get branch: %v"
,
err
)
}
commitIter
,
err
:=
r
.
Log
(
&
git
.
LogOptions
{
From
:
headRef
.
Hash
()})
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to get commit history: %v"
,
err
)
}
commitHistory
:=
make
(
map
[
plumbing
.
Hash
]
bool
)
err
=
commitIter
.
ForEach
(
func
(
c
*
object
.
Commit
)
error
{
commitHistory
[
c
.
Hash
]
=
true
return
nil
})
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to iterate over commits: %v"
,
err
)
}
var
tagList
[]
SemanticVersion
err
=
tags
.
ForEach
(
func
(
tag
*
plumbing
.
Reference
)
error
{
tagName
:=
tag
.
Name
()
.
Short
()
...
...
@@ -177,6 +192,26 @@ func getSemanticTags() ([]SemanticVersion, error) {
fmt
.
Println
(
"found tag: "
,
tagName
)
}
// Resolve the tag to a commit
var
commitHash
plumbing
.
Hash
obj
,
err
:=
r
.
TagObject
(
tag
.
Hash
())
if
err
==
nil
{
// This is an annotated tag
commitHash
=
obj
.
Target
}
else
{
// This is a lightweight tag or an error occurred
commitHash
=
tag
.
Hash
()
if
verbosity
{
fmt
.
Println
(
"tag "
+
tagName
+
" is a lightweight tag, you should use an annotated tag"
)
}
}
if
_
,
exists
:=
commitHistory
[
commitHash
];
!
exists
{
return
nil
}
if
versionRegex
.
MatchString
(
tagName
)
{
tagList
=
append
(
tagList
,
ParseSemanticVersion
(
tagName
))
}
...
...
@@ -199,69 +234,45 @@ func getSemanticTags() ([]SemanticVersion, error) {
return
tagList
,
nil
}
func
getCommitTypeSinceTag
(
tagCommit
*
object
.
Commit
)
(
CommitType
,
error
)
{
r
:=
gitRepo
func
findNextTagType
(
r
*
git
.
Repository
,
tagCommit
*
object
.
Commit
,
verbosity
bool
)
(
CommitType
,
error
)
{
cIter
,
err
:=
r
.
Log
(
&
git
.
LogOptions
{})
if
err
!=
nil
{
return
OtherCommit
,
fmt
.
Errorf
(
"failed to get commit log: %v"
,
err
)
return
OtherCommit
,
fmt
.
Errorf
(
"failed to get commit log
from tag
: %v"
,
err
)
}
var
commitType
CommitType
found
:=
false
var
commitType
CommitType
=
OtherCommit
counter
:=
0
err
=
cIter
.
ForEach
(
func
(
commit
*
object
.
Commit
)
error
{
counter
++
if
commit
.
Hash
==
tagCommit
.
Hash
{
found
=
true
if
verbosity
{
fmt
.
Println
(
"found tag commit after"
,
counter
,
"commits"
)
}
return
storer
.
ErrStop
// stop iteration
return
storer
.
ErrStop
}
message
:=
strings
.
TrimSpace
(
commit
.
Message
)
if
strings
.
HasPrefix
(
message
,
"feat"
)
{
commitType
=
FeatCommit
found
=
true
if
verbosity
{
fmt
.
Print
ln
(
"
f
ound feat commit after
"
,
counter
,
"commits"
)
fmt
.
Print
f
(
"
F
ound
'
feat
'
commit after
%d commits
\n
"
,
counter
)
}
return
storer
.
ErrStop
}
else
if
strings
.
HasPrefix
(
message
,
"fix"
)
{
// if we already found a feat or breaking commit, we don't care about fix commits
if
commitType
<
FixCommit
&&
commitType
>
OtherCommit
{
return
nil
}
commitType
=
FixCommit
if
verbosity
{
fmt
.
Println
(
"found fix commit after"
,
counter
,
"commits"
)
if
commitType
<
FixCommit
{
commitType
=
FixCommit
if
verbosity
{
fmt
.
Printf
(
"Found 'fix' commit after %d commits
\n
"
,
counter
)
}
}
}
else
if
containsBreakingChangeFooter
(
message
)
{
commitType
=
BreakingCommit
found
=
true
if
verbosity
{
fmt
.
Print
ln
(
"
f
ound breaking c
ommit
after
"
,
counter
,
"commits"
)
fmt
.
Print
f
(
"
F
ound breaking c
hange
after
%d commits
\n
"
,
counter
)
}
return
storer
.
ErrStop
// stop iteration
return
storer
.
ErrStop
}
return
nil
})
...
...
@@ -269,10 +280,6 @@ func getCommitTypeSinceTag(tagCommit *object.Commit) (CommitType, error) {
return
OtherCommit
,
fmt
.
Errorf
(
"failed to iterate over commit log: %v"
,
err
)
}
if
!
found
{
return
OtherCommit
,
fmt
.
Errorf
(
"tag commit not found in commit log"
)
}
return
commitType
,
nil
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment