mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2025-03-05 20:49:04 -08:00
parent
a4d1c770ae
commit
930f9de114
47
docs/docs/segment-nbgv.mdx
Normal file
47
docs/docs/segment-nbgv.mdx
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
---
|
||||||
|
id: nbgv
|
||||||
|
title: Nerdbank.GitVersioning
|
||||||
|
sidebar_label: Nbgv
|
||||||
|
---
|
||||||
|
|
||||||
|
## What
|
||||||
|
|
||||||
|
Display the [Nerdbank.GitVersioning][nbgv] version.
|
||||||
|
|
||||||
|
:::warning
|
||||||
|
The Nerdbank.GitVersioning CLI can be a bit slow causing the prompt to feel slow.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Sample Configuration
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "nbgv",
|
||||||
|
"style": "powerline",
|
||||||
|
"powerline_symbol": "",
|
||||||
|
"foreground": "#ffffff",
|
||||||
|
"background": "#3a579a",
|
||||||
|
"properties": {
|
||||||
|
"prefix": " \uF1D2 "
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
- template: `string` - A go [text/template][go-text-template] template extended with [sprig][sprig] utilizing the
|
||||||
|
properties below. Defaults to `{{ .Version }}`
|
||||||
|
|
||||||
|
## Template Properties
|
||||||
|
|
||||||
|
- `.Version`: `string` - the current version
|
||||||
|
- `.AssemblyVersion`: `string` - the current assembly version
|
||||||
|
- `.AssemblyInformationalVersion`: `string` - the current assembly informational version
|
||||||
|
- `.NuGetPackageVersion`: `string` - the current nuget package version
|
||||||
|
- `.ChocolateyPackageVersion`: `string` - the current chocolatey package version
|
||||||
|
- `.NpmPackageVersion`: `string` - the current npm package version
|
||||||
|
- `.SimpleVersion`: `string` - the current simple version
|
||||||
|
|
||||||
|
[nbgv]: https://github.com/dotnet/Nerdbank.GitVersioning
|
||||||
|
[go-text-template]: https://golang.org/pkg/text/template/
|
||||||
|
[sprig]: https://masterminds.github.io/sprig/
|
|
@ -44,6 +44,7 @@ module.exports = {
|
||||||
"java",
|
"java",
|
||||||
"julia",
|
"julia",
|
||||||
"kubectl",
|
"kubectl",
|
||||||
|
"nbgv",
|
||||||
"node",
|
"node",
|
||||||
"os",
|
"os",
|
||||||
"path",
|
"path",
|
||||||
|
|
|
@ -116,6 +116,8 @@ const (
|
||||||
Crystal SegmentType = "crystal"
|
Crystal SegmentType = "crystal"
|
||||||
// Dart writes the active dart version
|
// Dart writes the active dart version
|
||||||
Dart SegmentType = "dart"
|
Dart SegmentType = "dart"
|
||||||
|
// Nbgv writes the nbgv version information
|
||||||
|
Nbgv SegmentType = "nbgv"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (segment *Segment) string() string {
|
func (segment *Segment) string() string {
|
||||||
|
@ -245,6 +247,7 @@ func (segment *Segment) mapSegmentWithWriter(env environmentInfo) error {
|
||||||
AZFunc: &azfunc{},
|
AZFunc: &azfunc{},
|
||||||
Crystal: &crystal{},
|
Crystal: &crystal{},
|
||||||
Dart: &dart{},
|
Dart: &dart{},
|
||||||
|
Nbgv: &nbgv{},
|
||||||
}
|
}
|
||||||
if writer, ok := functions[segment.Type]; ok {
|
if writer, ok := functions[segment.Type]; ok {
|
||||||
props := &properties{
|
props := &properties{
|
||||||
|
|
58
src/segment_nbgv.go
Normal file
58
src/segment_nbgv.go
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
|
type nbgv struct {
|
||||||
|
props *properties
|
||||||
|
env environmentInfo
|
||||||
|
nbgv *versionInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
type versionInfo struct {
|
||||||
|
VersionFileFound bool `json:"VersionFileFound"`
|
||||||
|
Version string `json:"Version"`
|
||||||
|
AssemblyVersion string `json:"AssemblyVersion"`
|
||||||
|
AssemblyInformationalVersion string `json:"AssemblyInformationalVersion"`
|
||||||
|
NuGetPackageVersion string `json:"NuGetPackageVersion"`
|
||||||
|
ChocolateyPackageVersion string `json:"ChocolateyPackageVersion"`
|
||||||
|
NpmPackageVersion string `json:"NpmPackageVersion"`
|
||||||
|
SimpleVersion string `json:"SimpleVersion"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *nbgv) enabled() bool {
|
||||||
|
nbgv := "nbgv"
|
||||||
|
if !n.env.hasCommand(nbgv) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
response, err := n.env.runCommand(nbgv, "get-version", "--format=json")
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
n.nbgv = new(versionInfo)
|
||||||
|
err = json.Unmarshal([]byte(response), n.nbgv)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return n.nbgv.VersionFileFound
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *nbgv) string() string {
|
||||||
|
segmentTemplate := n.props.getString(SegmentTemplate, "{{ .Version }}")
|
||||||
|
template := &textTemplate{
|
||||||
|
Template: segmentTemplate,
|
||||||
|
Context: n.nbgv,
|
||||||
|
Env: n.env,
|
||||||
|
}
|
||||||
|
text, err := template.render()
|
||||||
|
if err != nil {
|
||||||
|
return err.Error()
|
||||||
|
}
|
||||||
|
return text
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *nbgv) init(props *properties, env environmentInfo) {
|
||||||
|
n.props = props
|
||||||
|
n.env = env
|
||||||
|
}
|
77
src/segment_nbgv_test.go
Normal file
77
src/segment_nbgv_test.go
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/alecthomas/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNbgv(t *testing.T) {
|
||||||
|
cases := []struct {
|
||||||
|
Case string
|
||||||
|
ExpectedEnabled bool
|
||||||
|
ExpectedString string
|
||||||
|
Response string
|
||||||
|
HasNbgv bool
|
||||||
|
SegmentTemplate string
|
||||||
|
Error error
|
||||||
|
}{
|
||||||
|
{Case: "nbgv not installed"},
|
||||||
|
{Case: "nbgv installed, no version file", HasNbgv: true, Response: "{ \"VersionFileFound\": false }"},
|
||||||
|
{Case: "nbgv installed with version file", ExpectedEnabled: true, HasNbgv: true, Response: "{ \"VersionFileFound\": true }"},
|
||||||
|
{
|
||||||
|
Case: "invalid template",
|
||||||
|
ExpectedEnabled: true,
|
||||||
|
ExpectedString: "invalid template text",
|
||||||
|
HasNbgv: true,
|
||||||
|
Response: "{ \"VersionFileFound\": true }",
|
||||||
|
SegmentTemplate: "{{ err }}",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Case: "command error",
|
||||||
|
HasNbgv: true,
|
||||||
|
Error: errors.New("oh noes"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Case: "invalid json",
|
||||||
|
HasNbgv: true,
|
||||||
|
Response: "><<<>>>",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Case: "Version",
|
||||||
|
ExpectedEnabled: true,
|
||||||
|
ExpectedString: "bump",
|
||||||
|
HasNbgv: true,
|
||||||
|
Response: "{ \"VersionFileFound\": true, \"Version\": \"bump\" }",
|
||||||
|
SegmentTemplate: "{{ .Version }}",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Case: "AssemblyVersion",
|
||||||
|
ExpectedEnabled: true,
|
||||||
|
ExpectedString: "bump",
|
||||||
|
HasNbgv: true,
|
||||||
|
Response: "{ \"VersionFileFound\": true, \"AssemblyVersion\": \"bump\" }",
|
||||||
|
SegmentTemplate: "{{ .AssemblyVersion }}",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range cases {
|
||||||
|
env := new(MockedEnvironment)
|
||||||
|
env.On("hasCommand", "nbgv").Return(tc.HasNbgv)
|
||||||
|
env.On("runCommand", "nbgv", []string{"get-version", "--format=json"}).Return(tc.Response, tc.Error)
|
||||||
|
nbgv := &nbgv{
|
||||||
|
env: env,
|
||||||
|
props: &properties{
|
||||||
|
values: map[Property]interface{}{
|
||||||
|
SegmentTemplate: tc.SegmentTemplate,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
enabled := nbgv.enabled()
|
||||||
|
assert.Equal(t, tc.ExpectedEnabled, enabled, tc.Case)
|
||||||
|
if enabled {
|
||||||
|
assert.Equal(t, tc.ExpectedString, nbgv.string(), tc.Case)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue