浏览代码

added default configuration for common vcs

bmallred 10 年之前
父节点
当前提交
4e975c13c4
共有 2 个文件被更改,包括 82 次插入11 次删除
  1. 75 4
      cmd/app.go
  2. 7 7
      cmd/app_test.go

+ 75 - 4
cmd/app.go

@ -26,18 +26,20 @@ func NewApp() *App {
26 26
		Stdin:     os.Stdin,
27 27
		Stderr:    os.Stderr,
28 28
		Stdout:    os.Stdout,
29
		Directory: getWorkingDirectory(),
29
		Directory: GetWorkingDirectory(),
30 30
	}
31 31
}
32 32
33 33
// Run the application
34 34
func (a *App) Run() error {
35
	ConfigureEnvironment()
36
35 37
	if len(a.Args) < 1 {
36 38
		a.Args = append(a.Args, "help")
37 39
	}
38 40
39 41
	executed := false
40
	for _, s := range getVersionControlSystems() {
42
	for _, s := range GetVersionControlSystems() {
41 43
		// Determine if the directory is version controlled (skip if it is not)
42 44
		err := isVersionControlled(s, a.Directory)
43 45
		if err != nil {
@ -58,16 +60,85 @@ func (a *App) Run() error {
58 60
}
59 61
60 62
// Get the working directory
61
func getWorkingDirectory() string {
63
func GetWorkingDirectory() string {
62 64
	d, _ := os.Getwd()
63 65
	return d
64 66
}
65 67
66 68
// Extract an array of version control systems available on the system
67
func getVersionControlSystems() []string {
69
func GetVersionControlSystems() []string {
68 70
	return strings.Split(os.Getenv("CODE_VCS"), ";")
69 71
}
70 72
73
func ConfigureEnvironment() {
74
	systems := GetVersionControlSystems()
75
76
	env := os.Getenv("CODE_VCS")
77
	if env == "" {
78
		os.Setenv("CODE_VCS", "git;hg;tf;bzr")
79
	}
80
81
	// Configure VCS checking
82
	for _, vcs := range systems {
83
		key := fmt.Sprintf("CODE_%s_CHECK", strings.ToUpper(vcs))
84
		env = os.Getenv(key)
85
86
		// Temporarily define the subcommand `incoming` for known version control systems
87
		if env == "" {
88
			incoming := ""
89
90
			switch vcs {
91
			case "git":
92
				incoming = "branch"
93
				break
94
			case "hg":
95
				incoming = "branch"
96
				break
97
			case "bzr":
98
				incoming = "root"
99
				break
100
			case "tf":
101
				incoming = "branches ."
102
				break
103
			}
104
105
			if incoming != "" {
106
				os.Setenv(key, incoming)
107
			}
108
		}
109
	}
110
111
	// Configure VCS incoming
112
	for _, vcs := range systems {
113
		key := fmt.Sprintf("CODE_%s_INCOMING", strings.ToUpper(vcs))
114
		env = os.Getenv(key)
115
116
		// Temporarily define the subcommand `incoming` for known version control systems
117
		if env == "" {
118
			incoming := ""
119
120
			switch vcs {
121
			case "git":
122
				incoming = "log ..@{u}"
123
				break
124
			case "hg":
125
				incoming = "incoming"
126
				break
127
			case "bzr":
128
				incoming = "missing"
129
				break
130
			case "tf":
131
				incoming = "history -r -stopafter:1 -version:W~T ."
132
				break
133
			}
134
135
			if incoming != "" {
136
				os.Setenv(key, incoming)
137
			}
138
		}
139
	}
140
}
141
71 142
// Determine if the directory is part of the version control system
72 143
func isVersionControlled(vcs, directory string) error {
73 144
	env := os.Getenv(fmt.Sprintf("CODE_%s_CHECK", strings.ToUpper(vcs)))

+ 7 - 7
cmd/app_test.go

@ -19,7 +19,7 @@ func TestExtension(t *testing.T) {
19 19
		Stdin:     &buffer,
20 20
		Stderr:    &buffer,
21 21
		Stdout:    &buffer,
22
		Directory: getWorkingDirectory(),
22
		Directory: GetWorkingDirectory(),
23 23
	}
24 24
25 25
	err := app.Run()
@ -40,7 +40,7 @@ func TestRawCommand(t *testing.T) {
40 40
		Stdin:     &buffer,
41 41
		Stderr:    &buffer,
42 42
		Stdout:    &buffer,
43
		Directory: getWorkingDirectory(),
43
		Directory: GetWorkingDirectory(),
44 44
	}
45 45
46 46
	err := app.Run()
@ -61,11 +61,11 @@ func TestMissingCheck(t *testing.T) {
61 61
		Stdin:     &buffer,
62 62
		Stderr:    &buffer,
63 63
		Stdout:    &buffer,
64
		Directory: getWorkingDirectory(),
64
		Directory: GetWorkingDirectory(),
65 65
	}
66 66
67 67
	err := app.Run()
68
	if err == nil {
68
	if err != nil {
69 69
		t.FailNow()
70 70
	}
71 71
}
@ -82,7 +82,7 @@ func TestMissingCommand(t *testing.T) {
82 82
		Stdin:     &buffer,
83 83
		Stderr:    &buffer,
84 84
		Stdout:    &buffer,
85
		Directory: getWorkingDirectory(),
85
		Directory: GetWorkingDirectory(),
86 86
	}
87 87
88 88
	err := app.Run()
@ -104,7 +104,7 @@ func TestMissingRepository(t *testing.T) {
104 104
		Stdin:     &buffer,
105 105
		Stderr:    &buffer,
106 106
		Stdout:    &buffer,
107
		Directory: getWorkingDirectory(),
107
		Directory: GetWorkingDirectory(),
108 108
	}
109 109
110 110
	err := app.Run()
@ -125,7 +125,7 @@ func TestNoArguments(t *testing.T) {
125 125
		Stdin:     &buffer,
126 126
		Stderr:    &buffer,
127 127
		Stdout:    &buffer,
128
		Directory: getWorkingDirectory(),
128
		Directory: GetWorkingDirectory(),
129 129
	}
130 130
131 131
	err := app.Run()