watson-ruby 1.6.1 → 1.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +45 -33
- data/lib/watson/command.rb +14 -3
- data/lib/watson/config.rb +95 -8
- data/lib/watson/github.rb +68 -29
- data/lib/watson/parser.rb +11 -3
- data/lib/watson/version.rb +1 -1
- data/spec/config_spec.rb +3 -1
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 514fedab81cf81f62c7a4fb415d83750ebf05ad5
|
4
|
+
data.tar.gz: 4b63e079270286b0fd7bea2a3d1a5fc3e17310ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db6f2c055827b284eb40682f5bb137c7ee21cbdb85dde8924f3a2653c9f334922f6493af9c974d603957b0d3901cbd3f80fa31b84ebf8ef0be7a95dcd243dc10
|
7
|
+
data.tar.gz: 14a2b0d85756bb5357c49de86029be86d6a467f955d687af9269326049196809d16d342cc41b49de1dd6ad22ba65ae3924c3923245c60b63eba82aba94a9ff9e
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# watson-ruby [![Gem Version](https://badge.fury.io/rb/watson-ruby.png)](http://badge.fury.io/rb/watson-ruby) [![Build Status](https://travis-ci.org/nhmood/watson-ruby.png?branch=master)](https://travis-ci.org/nhmood/watson-ruby)
|
1
|
+
# watson-ruby [![Gem Version](https://badge.fury.io/rb/watson-ruby.png)](http://badge.fury.io/rb/watson-ruby) [![Build Status](https://travis-ci.org/nhmood/watson-ruby.png?branch=master)](https://travis-ci.org/nhmood/watson-ruby)
|
2
2
|
|
3
3
|
### an inline issue manager
|
4
4
|
[watson](http://goosecode.com/watson) ([mirror](http://nhmood.github.io/watson-ruby)) is a tool for creating and tracking bug reports, issues, and internal notes in code.
|
@@ -8,11 +8,11 @@ It is avaliable in two flavors, [watson-ruby](http://github.com/nhmood/watson-ru
|
|
8
8
|
### See the RDoc documentation [here](http://goosecode.com/watson/ruby/doc/) ([mirror](http://nhmood.github.io/watson-ruby/ruby/doc/))
|
9
9
|
|
10
10
|
## Installation
|
11
|
-
watson-ruby has been tested with **Ruby v2.
|
11
|
+
watson-ruby has been tested with **Ruby v2.1** and **RubyGems v2.0.3** (on **Arch Linux**)
|
12
12
|
watson-ruby requires the ```json``` gem
|
13
13
|
|
14
14
|
### From Repo
|
15
|
-
watson-ruby is avaliable as a RubyGems ([link](https://rubygems.org/gems/watson-ruby)).
|
15
|
+
watson-ruby is avaliable as a RubyGems ([link](https://rubygems.org/gems/watson-ruby)).
|
16
16
|
You can either download it directory from ```gem``` using
|
17
17
|
```
|
18
18
|
gem install watson-ruby
|
@@ -38,10 +38,10 @@ bundle exec rake
|
|
38
38
|
|
39
39
|
## Usage
|
40
40
|
For a quick idea of how to use watson, check out the [app demo](http://goosecode.com/watson)! ([mirror](http://nhmood.github.io/watson-ruby))
|
41
|
-
See below for a description of what all the command line arguments do.
|
41
|
+
See below for a description of what all the command line arguments do.
|
42
42
|
|
43
43
|
### Supported Languages
|
44
|
-
If you see something missing from the list please either file an issue or
|
44
|
+
If you see something missing from the list please either file an issue or
|
45
45
|
submit a pull request (comment parsing happens in **lib/watson/paser.rb**)
|
46
46
|
|
47
47
|
- **C / C++**
|
@@ -69,6 +69,7 @@ submit a pull request (comment parsing happens in **lib/watson/paser.rb**)
|
|
69
69
|
- **Markdown**
|
70
70
|
- **HTML**
|
71
71
|
- **Emacslisp**
|
72
|
+
- **LaTex**
|
72
73
|
|
73
74
|
|
74
75
|
## Command line arguments
|
@@ -79,36 +80,37 @@ If no RC file exists, default RC file will be created
|
|
79
80
|
|
80
81
|
-c, --context-depth lines of context to provide with posted issue
|
81
82
|
-d, --dirs list of directories to search in
|
83
|
+
--debug enable debug prints from specified class
|
84
|
+
all debug prints enabled if no arguments passed
|
82
85
|
-f, --files list of files to search in
|
83
86
|
--format set output format for watson
|
84
87
|
[print, json, unite, silent]
|
85
88
|
-h, --help print help
|
86
89
|
-i, --ignore list of files, directories, or types to ignore
|
87
90
|
-p, --parse-depth depth to recursively parse directories
|
88
|
-
-r, --remote list / create tokens for
|
89
|
-
[github, bitbucket, gitlab, asana]
|
91
|
+
-r, --remote list / create tokens for Bitbucket/GitHub
|
90
92
|
-s, --show filter results (files listed) based on issue status
|
91
93
|
[all, clean, dirty]
|
92
94
|
-t, --tags list of tags to search for
|
93
95
|
-u, --update update remote repos with current issues
|
94
96
|
-v, --version print watson version and info
|
95
97
|
|
96
|
-
|
97
98
|
Any number of files, tags, dirs, and ignores can be listed after flag
|
98
99
|
Ignored files should be space separated
|
99
100
|
To use *.filetype identifier, encapsulate in "" to avoid shell substitutions
|
100
101
|
|
101
102
|
Report bugs to: watson@goosecode.com
|
102
|
-
watson home page: <http://goosecode.com/
|
103
|
+
watson home page: <http://goosecode.com/watson>
|
103
104
|
[goosecode] labs | 2012-2013
|
104
105
|
|
106
|
+
|
105
107
|
```
|
106
108
|
### All file/directory/tag related parameters support relative as well as absolute paths.
|
107
109
|
|
108
110
|
### -c, --context-lines [LINES]
|
109
111
|
This parameter specifies how many lines of context watson should include when posting issues to remote repos.
|
110
112
|
When this parameter is set from the command line, the .watsonrc config file is written with the value; the command line option effectively sets the default value for this feature in the current directory.
|
111
|
-
The default value is set to 15 (and can be found in the lib/watson/command.rb file).
|
113
|
+
The default value is set to 15 (and can be found in the lib/watson/command.rb file).
|
112
114
|
|
113
115
|
|
114
116
|
### -d, --dirs [DIRS]
|
@@ -120,7 +122,7 @@ If watson is run without this parameter, the current directory is parsed.
|
|
120
122
|
### --debug [CLASS]
|
121
123
|
This parameter enables debug prints for the specified class.
|
122
124
|
It should be followed by a space separated list of classes that should print debug messages.
|
123
|
-
The list of classes are found in `lib/watson`.
|
125
|
+
The list of classes are found in `lib/watson`.
|
124
126
|
If passed without arguments, debug prints in **ALL** classes of watson will be enabled.
|
125
127
|
|
126
128
|
|
@@ -134,19 +136,19 @@ This parameter specifies how watson should output the issues that it finds.
|
|
134
136
|
If passed with `print`, the regular printing will occur, either to Unix less or STDOUT (depending on system).
|
135
137
|
If passed with `json`, the output will be in the form of JSON, and will be stored in `.watsonresults`.
|
136
138
|
|
137
|
-
- This particular option is useful if attempting to intergrate watson into other tools / platforms.
|
139
|
+
- This particular option is useful if attempting to intergrate watson into other tools / platforms.
|
138
140
|
|
139
141
|
If passed with `unite`, the output will be compatible with the unite.vim plugin
|
140
142
|
(see the **Unite** section below or visit [alpaca-tc/vim-unite-watson](https://github.com/alpaca-tc/vim-unite-watson.vim)
|
141
143
|
|
142
144
|
If passed with `silent`, watson will have no output.
|
143
145
|
|
144
|
-
- This particular option is useful if remote posting to GitHub, Bitbucket, or GitLab is desired without the visual component of watson.
|
146
|
+
- This particular option is useful if remote posting to GitHub, Bitbucket, or GitLab is desired without the visual component of watson.
|
145
147
|
- For example, you could set up a **git commit hook** to post issues to GitHub/Bitbucket/GitLab, but avoid the giant print out every time.
|
146
148
|
|
147
149
|
|
148
150
|
### -h, --help
|
149
|
-
This parameter displays the list of avaliable options for watson.
|
151
|
+
This parameter displays the list of avaliable options for watson.
|
150
152
|
|
151
153
|
|
152
154
|
### -i, --ignore [IGNORES]
|
@@ -159,13 +161,13 @@ This parameter should be used as an opposite to -d/-f, when there are more files
|
|
159
161
|
This parameter specifies how deep watson should recursively parse directories.
|
160
162
|
The 'depth' is defined as how many levels deep from the top-most specified directory to parse.
|
161
163
|
If individual directories are passed with the -d (--dirs) flag, each will be parsed PARSE_DEPTH layers, regardless of their depth from the current directory.
|
162
|
-
If watson is run without this parameter, the parsing depth is unlimited and will search through all subdirectories found.
|
164
|
+
If watson is run without this parameter, the parsing depth is unlimited and will search through all subdirectories found.
|
163
165
|
|
164
166
|
|
165
167
|
### -r, --remote [GITHUB, BITBUCKET, GITLAB, ASANA]
|
166
168
|
This parameter is used to both list currently established remotes as well as setup new ones.
|
167
169
|
If passed without any options, the currently established remotes will be listed.
|
168
|
-
If passed with a github, bitbucket, gitlab, asana argument, watson will proceed to ask some questions to set up the corresponding remote.
|
170
|
+
If passed with a github, bitbucket, gitlab, asana argument, watson will proceed to ask some questions to set up the corresponding remote.
|
169
171
|
|
170
172
|
|
171
173
|
### -s, --show [ALL, CLEAN, DIRTY]
|
@@ -194,19 +196,21 @@ This parameter displays the current version of watson you are running.
|
|
194
196
|
watson supports an RC file that allows for reusing commong settings without repeating command line arguments every time.
|
195
197
|
|
196
198
|
The .watsonrc is placed in every directory that watson is run from as opposed to a unified file (in ~/.watsonrc for example). The thought process behind this is that each project may have a different set of folders to ignore, directories to search through, and tags to look for.
|
197
|
-
For example, a C/C++ project might want to look in src/ and ignore obj/ whereas a Ruby project might want to look in lib/ and ignore assets/.
|
199
|
+
For example, a C/C++ project might want to look in src/ and ignore obj/ whereas a Ruby project might want to look in lib/ and ignore assets/.
|
198
200
|
|
199
201
|
A base `.watsonrc` is created in the users `$HOME` directory and used as the template for creating all subsequent config files.
|
200
202
|
Any changes made in the `$HOME/.watsonrc` will carry on towards new configs, but will **not** update previously created configs.
|
201
203
|
The `$HOME/.watsonrc` is directly copied, not merged, as to avoid confusion as to the source of config parameters.
|
204
|
+
The `$HOME/.watsonrc` contains all remote GitHub API tokens created. The individual project `.watsonrc` will contain only the username
|
205
|
+
associated with the API token, and will reference `$HOME/.watsonrc` to obtain the API token on runtime.
|
202
206
|
|
203
207
|
The .watsonrc file is fairly straightforward...
|
204
|
-
**[dirs]** - This is a newline separated list of directories to look in while parsing.
|
208
|
+
**[dirs]** - This is a newline separated list of directories to look in while parsing.
|
205
209
|
|
206
|
-
**[tags]** - This is a newline separated list of tags to look for while parsing.
|
210
|
+
**[tags]** - This is a newline separated list of tags to look for while parsing.
|
207
211
|
|
208
|
-
**[ignore]** - This is a newline separated list of files / folders to ignore while parsing.
|
209
|
-
This supports wildcard type selecting by providing .filename (no * required)
|
212
|
+
**[ignore]** - This is a newline separated list of files / folders to ignore while parsing.
|
213
|
+
This supports wildcard type selecting by providing .filename (no * required)
|
210
214
|
|
211
215
|
**[context_depth]** - This value determines how many lines of context should be grabbed for each issue when posting to a remote.
|
212
216
|
|
@@ -216,12 +220,20 @@ The format of filetype entries should be
|
|
216
220
|
".type" => ["comment1", "comment2"]
|
217
221
|
".nhmood" => ["@@", "***"]
|
218
222
|
".cc" => ["//"]
|
219
|
-
```
|
223
|
+
```
|
224
|
+
|
225
|
+
**[show_type]** - This field allows for setting the default show type, similar to the -s/--show command line arg
|
226
|
+
If set to `clean`, only files that watson did *NOT* find issues in will be displayed.
|
227
|
+
If set to `dirty`, only files that watson *DID* find issues in will be displayed.
|
228
|
+
If set to `all`, watson will display all files, regardless of their issue status.
|
229
|
+
The default behavior of watson is the `all` option.
|
230
|
+
|
231
|
+
**[tag_format]** - Customize the tag format for your project. Defaults to `[TAG] - COMMENT`. "TAG" and "COMMENT" are required keywords.
|
220
232
|
|
221
|
-
**[(github/bitbucket/gitlab/asana)_api]** - If a remote is established, the API key for the corresponding remote is stored here.
|
222
|
-
Currently, OAuth has yet to be implemented for Bitbucket so the Bitbucket username is stored here.
|
233
|
+
**[(github/bitbucket/gitlab/asana)_api]** - If a remote is established, the API key for the corresponding remote is stored here.
|
234
|
+
Currently, OAuth has yet to be implemented for Bitbucket so the Bitbucket username is stored here.
|
223
235
|
|
224
|
-
**[(github/bitbucket/gitlab)_repo]** - The repo name / path is stored here.
|
236
|
+
**[(github/bitbucket/gitlab)_repo]** - The repo name / path is stored here.
|
225
237
|
|
226
238
|
**[(github/gitlab)_endpoint]** - The endpoint in case of GitHub Enterprise of GitLab configuration.
|
227
239
|
|
@@ -229,19 +241,19 @@ Currently, OAuth has yet to be implemented for Bitbucket so the Bitbucket userna
|
|
229
241
|
|
230
242
|
**[asana_workspace]** - The Asana workspace in case of Asana integration is stored here.
|
231
243
|
|
232
|
-
The remote related .watsonrc options shouldn't need to be edited manually, as they are automatically populated when the -r, --remote setup is called.
|
244
|
+
The remote related .watsonrc options shouldn't need to be edited manually, as they are automatically populated when the -r, --remote setup is called.
|
233
245
|
|
234
246
|
## unite.vim
|
235
|
-
### [vim-unite-watson.vim](https://github.com/alpaca-tc/vim-unite-watson.vim) by [alpaca-tc](http://github.com/alpaca-tc)
|
247
|
+
### [vim-unite-watson.vim](https://github.com/alpaca-tc/vim-unite-watson.vim) by [alpaca-tc](http://github.com/alpaca-tc)
|
236
248
|
**alpaca-tc** was kind enough to create a [unite.vim](https://github.com/Shougo/unite.vim) plugin to integrate with watson!
|
237
249
|
**unite.vim** allows you to create user interfaces within vim and lets you search and display any kind of information.
|
238
|
-
The **unite-vim-watson.vim** plugin allows you to:
|
250
|
+
The **unite-vim-watson.vim** plugin allows you to:
|
239
251
|
|
240
|
-
- Generate a list of issues directly inside vim
|
241
|
-
- Search and select files displayed in the watson output
|
242
|
-
- Jump directly to the line where the issue is located (!!)
|
252
|
+
- Generate a list of issues directly inside vim
|
253
|
+
- Search and select files displayed in the watson output
|
254
|
+
- Jump directly to the line where the issue is located (!!)
|
243
255
|
|
244
|
-
If you use vim I ***definitely*** recommend using **vim-unite-watson.vim**, it works wonders for productivity!
|
256
|
+
If you use vim I ***definitely*** recommend using **vim-unite-watson.vim**, it works wonders for productivity!
|
245
257
|
|
246
258
|
### See it in action [here (GIF demo)](https://github.com/alpaca-tc/vim-unite-watson.vim)
|
247
259
|
|
@@ -251,7 +263,7 @@ Special thanks to [@eugenekolo](http://twitter.com/eugenekolo) [[email](eugenek@
|
|
251
263
|
Special thanks to [@crowell](http://github.com/crowell) for testing out watson-ruby!
|
252
264
|
|
253
265
|
## FAQ
|
254
|
-
- **Will inline issues get deleted if I close them on GitHub/Bitbucket/GitLab?**
|
266
|
+
- **Will inline issues get deleted if I close them on GitHub/Bitbucket/GitLab?**
|
255
267
|
No, watson won't touch your source code, it will only inform you that issues have been closed remotely.
|
256
268
|
|
257
269
|
- **Why Ruby?**
|
data/lib/watson/command.rb
CHANGED
@@ -450,20 +450,31 @@ module Watson
|
|
450
450
|
formatter = Printer.new(@config).build_formatter
|
451
451
|
formatter.print_header
|
452
452
|
|
453
|
+
# Get $HOME/.watsonrc to check for remotes
|
454
|
+
_home_conf = Watson::Config.home_conf
|
455
|
+
|
453
456
|
print BOLD + "Existing Remotes:\n" + RESET
|
454
457
|
|
455
458
|
# Check the config for any remote entries (GitHub or Bitbucket) and print
|
456
459
|
# We *should* always have a repo + API together, but API should be enough
|
457
|
-
if
|
460
|
+
if _home_conf.github_api.empty? && @config.bitbucket_api.empty? && @config.asana_api.empty?
|
458
461
|
formatter.print_status "!", YELLOW
|
459
462
|
print BOLD + "No remotes currently exist\n\n" + RESET
|
460
463
|
end
|
461
464
|
|
462
|
-
|
463
|
-
print BOLD + "GitHub
|
465
|
+
unless _home_conf.github_api.empty?
|
466
|
+
print BOLD + "- GitHub APIs -\n" + RESET
|
467
|
+
_home_conf.github_api.each_with_index do |_api, _i|
|
468
|
+
print BOLD + "#{_i+1}. #{_api[0]}" + RESET + " : #{_api[1]}\n"
|
469
|
+
end
|
470
|
+
print "\n\n"
|
471
|
+
end
|
472
|
+
|
473
|
+
unless @config.github_repo.empty?
|
464
474
|
print BOLD + "GitHub Repo : " + RESET + "#{ @config.github_repo }\n\n"
|
465
475
|
end
|
466
476
|
|
477
|
+
|
467
478
|
if !@config.bitbucket_api.empty?
|
468
479
|
print BOLD + "Bitbucket User : " + RESET + "#{ @config.bitbucket_api }\n" + RESET
|
469
480
|
print BOLD + "Bitbucket Repo : " + RESET + "#{ @config.bitbucket_repo }\n\n" + RESET
|
data/lib/watson/config.rb
CHANGED
@@ -4,12 +4,26 @@ module Watson
|
|
4
4
|
# that are accessed throughout watson
|
5
5
|
class Config
|
6
6
|
|
7
|
+
class << self
|
8
|
+
def home_conf
|
9
|
+
# Return Conf object for $HOME/.watsonrc
|
10
|
+
_home_conf = Watson::Config.new()
|
11
|
+
_home_conf.rc_file = File.expand_path('~') + '/.watsonrc'
|
12
|
+
_home_conf.read_conf
|
13
|
+
return _home_conf
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
7
18
|
# Include for debug_print
|
8
19
|
include Watson
|
9
20
|
|
10
21
|
# [review] - Combine into single statement (for performance or something?)
|
11
22
|
# [todo] - Add config options (rc file) for default max depth and context lines
|
12
23
|
|
24
|
+
# Location of .watsonrc, modified when working with remote API tokens
|
25
|
+
attr_accessor :rc_file
|
26
|
+
|
13
27
|
# List of all files/folders to ignore when parsing
|
14
28
|
attr_accessor :ignore_list
|
15
29
|
# List of directories to parse
|
@@ -18,6 +32,8 @@ module Watson
|
|
18
32
|
attr_accessor :file_list
|
19
33
|
# List of tags to look for when parsing
|
20
34
|
attr_accessor :tag_list
|
35
|
+
# Tag format for look for
|
36
|
+
attr_accessor :tag_format
|
21
37
|
# List of custom filetypes to accept
|
22
38
|
attr_accessor :type_list
|
23
39
|
# Number of directories to parse recursively
|
@@ -132,11 +148,13 @@ module Watson
|
|
132
148
|
@type_list = Hash.new()
|
133
149
|
@issue_count = 0
|
134
150
|
|
151
|
+
@tag_format = "[TAG] - COMMENT"
|
152
|
+
|
135
153
|
# Remote options
|
136
154
|
@remote_valid = false
|
137
155
|
|
138
156
|
@github_valid = false
|
139
|
-
@github_api =
|
157
|
+
@github_api = Hash.new
|
140
158
|
@github_endpoint = ""
|
141
159
|
@github_repo = ""
|
142
160
|
@github_issues = Hash.new()
|
@@ -394,6 +412,9 @@ module Watson
|
|
394
412
|
end
|
395
413
|
debug_print "@tag_list --> #{ @tag_list }\n"
|
396
414
|
|
415
|
+
when "tag_format"
|
416
|
+
@tag_format = _line.chomp!
|
417
|
+
debug_print @tag_format
|
397
418
|
|
398
419
|
when "type"
|
399
420
|
# Regex to grab ".type" => ["param1", "param2"]
|
@@ -427,10 +448,43 @@ module Watson
|
|
427
448
|
debug_print "@ignore_list --> #{ @ignore_list }\n"
|
428
449
|
|
429
450
|
|
451
|
+
when "show_type"
|
452
|
+
# No need for parsing, just check case
|
453
|
+
|
454
|
+
case _line.chomp.downcase
|
455
|
+
when "clean"
|
456
|
+
@show_type = "clean"
|
457
|
+
debug_print "@show_type set to \"clean\" from config\n"
|
458
|
+
|
459
|
+
when "dirty"
|
460
|
+
@show_type = "dirty"
|
461
|
+
debug_print "@show_type set to \"dirty\" from config\n"
|
462
|
+
|
463
|
+
else
|
464
|
+
@show_type = "all"
|
465
|
+
debug_print "@show_type set to \"all\" from config\n"
|
466
|
+
|
467
|
+
end
|
468
|
+
|
469
|
+
|
470
|
+
# Project directories reference $HOME/.watsonrc for GitHub API token
|
471
|
+
# If we don't find a username=token format string, use username
|
472
|
+
# as Hash reference to $HOME/.watsonrc --> github_api
|
430
473
|
when "github_api"
|
431
|
-
#
|
432
|
-
|
433
|
-
|
474
|
+
# Regex for username=token
|
475
|
+
_mtch = _line.chomp.match(/(\S+)=(\S+)/)
|
476
|
+
|
477
|
+
# If no = match, then it is a hash reference
|
478
|
+
if _mtch.nil?
|
479
|
+
_home = Watson::Config.home_conf
|
480
|
+
@github_api[_line.chomp] = _home.github_api[_line.chomp]
|
481
|
+
|
482
|
+
# If we do find match, this is a $HOME/.watsonrc
|
483
|
+
# Populate home conf with all API tokens
|
484
|
+
else
|
485
|
+
@github_api[_mtch[1]] = _mtch[2]
|
486
|
+
end
|
487
|
+
|
434
488
|
debug_print "GitHub API: #{ @github_api }\n"
|
435
489
|
|
436
490
|
|
@@ -511,7 +565,7 @@ module Watson
|
|
511
565
|
|
512
566
|
# Check if RC exists, if not create one
|
513
567
|
if !Watson::FS.check_file(@rc_file)
|
514
|
-
print "Unable to open #{ @rc_file },
|
568
|
+
print "Unable to open #{ @rc_file }, attempting to create\n"
|
515
569
|
create_conf
|
516
570
|
else
|
517
571
|
debug_print "Opened #{ @rc_file } for reading\n"
|
@@ -592,15 +646,48 @@ module Watson
|
|
592
646
|
end
|
593
647
|
|
594
648
|
# Now that we have skipped all the things that need to be updated, write them in
|
595
|
-
params.each do |
|
596
|
-
_update.write("[#{
|
597
|
-
|
649
|
+
params.each do | _name |
|
650
|
+
_update.write("[#{ _name }]\n")
|
651
|
+
_param = self.instance_variable_get("@#{ _name }")
|
652
|
+
|
653
|
+
if _param.is_a?(Hash)
|
654
|
+
# If the config file we are dealing with is in $HOME/.watsonrc
|
655
|
+
# then write as username=token, else write just username
|
656
|
+
pp(_param)
|
657
|
+
if @rc_file == File.expand_path('~') + '/.watsonrc'
|
658
|
+
_param.each do |val|
|
659
|
+
_update.write("#{val[0]}=#{val[1]}\n")
|
660
|
+
end
|
661
|
+
else
|
662
|
+
_param.each do |val|
|
663
|
+
_update.write("#{val[0]}\n")
|
664
|
+
end
|
665
|
+
end
|
666
|
+
|
667
|
+
elsif _param.is_a?(Array)
|
668
|
+
_param.each do |val|
|
669
|
+
_update.write("#{val}\n")
|
670
|
+
end
|
671
|
+
|
672
|
+
else
|
673
|
+
_update.write("#{_param}\n")
|
674
|
+
end
|
675
|
+
|
598
676
|
_update.write("\n\n\n")
|
599
677
|
end
|
600
678
|
|
601
679
|
_update.close
|
602
680
|
end
|
603
681
|
|
682
|
+
|
683
|
+
|
684
|
+
###########################################################
|
685
|
+
# Get first key from API list (hash)
|
686
|
+
def github_token
|
687
|
+
self.github_api[github_api.keys[0]]
|
688
|
+
end
|
689
|
+
|
690
|
+
|
604
691
|
end
|
605
692
|
end
|
606
693
|
|
data/lib/watson/github.rb
CHANGED
@@ -16,6 +16,7 @@ module Watson
|
|
16
16
|
# Include for debug_print
|
17
17
|
include Watson
|
18
18
|
|
19
|
+
|
19
20
|
#############################################################################
|
20
21
|
# Setup remote access to GitHub
|
21
22
|
# Get Username, Repo, and PW and perform necessary HTTP calls to check validity
|
@@ -25,21 +26,52 @@ module Watson
|
|
25
26
|
debug_print "#{ self.class } : #{ __method__ }\n"
|
26
27
|
|
27
28
|
formatter = Printer.new(config).build_formatter
|
29
|
+
|
30
|
+
# Create new RC for $HOME/.watsonrc and check for existing remotes there
|
31
|
+
_home_conf = Watson::Config.home_conf
|
32
|
+
|
33
|
+
return false if !get_token(config, _home_conf, formatter)
|
34
|
+
return false if !get_repo(config, formatter)
|
35
|
+
|
36
|
+
# Give user some info
|
37
|
+
print "\n"
|
38
|
+
formatter.print_status "o", GREEN
|
39
|
+
print BOLD + "GitHub successfully setup\n" + RESET
|
40
|
+
print " Issues will now automatically be retrieved from GitHub by default\n"
|
41
|
+
print " Use -u, --update to post issues to GitHub\n"
|
42
|
+
print " See help or README for more details on GitHub/Bitbucket access\n\n"
|
43
|
+
|
44
|
+
true
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
#############################################################################
|
49
|
+
# Obtain API token fom GitHub
|
50
|
+
# Either generate new Auth Token or use existing for current dir/project
|
51
|
+
def get_token(config, home_conf, formatter)
|
52
|
+
|
53
|
+
# Avaliable GitHub APIs
|
54
|
+
_github = home_conf.github_api
|
55
|
+
|
28
56
|
formatter.print_status "+", GREEN
|
29
57
|
print BOLD + "Obtaining OAuth Token for GitHub...\n" + RESET
|
30
58
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
print
|
35
|
-
print " (Y)es/(N)o: "
|
59
|
+
unless _github.empty?
|
60
|
+
formatter.print_status "!", YELLOW
|
61
|
+
print BOLD + "Previous GitHub APIs found do you want to use one that is listed?\n" + RESET
|
62
|
+
print " Enter # of API key (blank will create new): "
|
36
63
|
|
37
64
|
# Get user input
|
38
|
-
|
39
|
-
|
40
|
-
|
65
|
+
unless (_api = $stdin.gets.chomp).empty?
|
66
|
+
print "\n"
|
67
|
+
_api = _api.to_i - 1
|
68
|
+
|
69
|
+
# Return specified API token if # selected is valid
|
70
|
+
return _github[_github.keys[_api]] if _api >= 0 && _api < _github.length
|
71
|
+
|
41
72
|
formatter.print_status "x", RED
|
42
|
-
print BOLD + "
|
73
|
+
print BOLD + "Invalid API selected\n" + RESET
|
74
|
+
print " Make sure the correct # was selected from the list!\n" + RESET
|
43
75
|
return false
|
44
76
|
end
|
45
77
|
end
|
@@ -53,6 +85,7 @@ module Watson
|
|
53
85
|
print BOLD + "Is this a GitHub Enterprise account?\n" + RESET
|
54
86
|
print " (Y)es/(N)o: "
|
55
87
|
|
88
|
+
|
56
89
|
# Get user input
|
57
90
|
_enterprise = $stdin.gets.chomp
|
58
91
|
if ["yes", "y"].include?(_enterprise.downcase)
|
@@ -144,13 +177,32 @@ module Watson
|
|
144
177
|
return false
|
145
178
|
end
|
146
179
|
|
180
|
+
# Add to $HOME/.watsonrc and current .watsonrc
|
181
|
+
home_conf.github_api[_username] = _json["token"]
|
182
|
+
home_conf.update_conf("github_api")
|
183
|
+
|
147
184
|
# Store endpoint and API key obtained from POST to @config.github_api
|
148
185
|
config.github_endpoint = _endpoint
|
149
|
-
|
186
|
+
|
187
|
+
# If we are currently in $HOME then don't touch the .watsonrc
|
188
|
+
# [todo] - Better way of selecting API if in $HOME, or just don't use in $HOME...
|
189
|
+
unless Dir.pwd.eql?(File.expand_path('~'))
|
190
|
+
config.github_api = {_username => _json["token"]}
|
191
|
+
config.update_conf("github_api", "github_endpoint")
|
192
|
+
end
|
193
|
+
|
194
|
+
|
150
195
|
debug_print "Config GitHub API Endpoint updated to: #{ config.github_endpoint }\n"
|
151
196
|
debug_print "Config GitHub API Key updated to: #{ config.github_api }\n"
|
152
197
|
|
198
|
+
true
|
199
|
+
end
|
200
|
+
|
153
201
|
|
202
|
+
#############################################################################
|
203
|
+
# Obtain repo info for GitHub
|
204
|
+
# Set repo for current dir/project
|
205
|
+
def get_repo(config, formatter)
|
154
206
|
# Get repo information, if blank give error
|
155
207
|
formatter.print_status "!", YELLOW
|
156
208
|
print BOLD + "Repo information required\n" + RESET
|
@@ -186,10 +238,10 @@ module Watson
|
|
186
238
|
#
|
187
239
|
# Auth token
|
188
240
|
opts = {
|
189
|
-
:url => "#{
|
241
|
+
:url => "#{ config.github_endpoint }/repos/#{ _owner }/#{ _repo }/labels",
|
190
242
|
:ssl => true,
|
191
243
|
:method => "POST",
|
192
|
-
:auth => config.
|
244
|
+
:auth => config.github_token,
|
193
245
|
:data => {"name" => "watson",
|
194
246
|
"color" => "00AEEF" },
|
195
247
|
:verbose => false
|
@@ -217,6 +269,7 @@ module Watson
|
|
217
269
|
|
218
270
|
# Store owner/repo obtained from POST to @config.github_repo
|
219
271
|
config.github_repo = "#{ _owner }/#{ _repo }"
|
272
|
+
config.update_conf("github_repo")
|
220
273
|
debug_print "Config GitHub API Key updated to: #{ config.github_repo }\n"
|
221
274
|
|
222
275
|
# Inform user of label creation status (created above)
|
@@ -234,21 +287,7 @@ module Watson
|
|
234
287
|
print " Status: #{ _resp.code } - #{ _resp.message }\n"
|
235
288
|
end
|
236
289
|
|
237
|
-
|
238
|
-
# Call config updater/writer from @config to write config
|
239
|
-
debug_print "Updating config with new GitHub info\n"
|
240
|
-
config.update_conf("github_api", "github_repo", "github_endpoint")
|
241
|
-
|
242
|
-
# Give user some info
|
243
|
-
print "\n"
|
244
|
-
formatter.print_status "o", GREEN
|
245
|
-
print BOLD + "GitHub successfully setup\n" + RESET
|
246
|
-
print " Issues will now automatically be retrieved from GitHub by default\n"
|
247
|
-
print " Use -u, --update to post issues to GitHub\n"
|
248
|
-
print " See help or README for more details on GitHub/Bitbucket access\n\n"
|
249
|
-
|
250
|
-
return true
|
251
|
-
|
290
|
+
true
|
252
291
|
end
|
253
292
|
|
254
293
|
|
@@ -278,7 +317,7 @@ module Watson
|
|
278
317
|
:url => "#{ config.github_endpoint }/repos/#{ config.github_repo }/issues?labels=watson",
|
279
318
|
:ssl => true,
|
280
319
|
:method => "GET",
|
281
|
-
:auth => config.
|
320
|
+
:auth => config.github_token,
|
282
321
|
:verbose => false
|
283
322
|
}
|
284
323
|
|
@@ -361,7 +400,7 @@ module Watson
|
|
361
400
|
:url => "#{ config.github_endpoint }/repos/#{ config.github_repo }/issues",
|
362
401
|
:ssl => true,
|
363
402
|
:method => "POST",
|
364
|
-
:auth => config.
|
403
|
+
:auth => config.github_token,
|
365
404
|
:data => { "title" => issue[:title] + " [#{ issue[:path] }]",
|
366
405
|
"labels" => [issue[:tag], "watson"],
|
367
406
|
"body" => _body },
|
data/lib/watson/parser.rb
CHANGED
@@ -208,8 +208,15 @@ module Watson
|
|
208
208
|
# [review] - It is possible to embed the valid tags in the regexp,
|
209
209
|
# with a ~5% performance gain, but this would loose the warning about
|
210
210
|
# unrecognized tags.
|
211
|
-
|
211
|
+
_tag_format = Regexp.escape(@config.tag_format).gsub('\\ ', ' ')
|
212
|
+
_tag_format_regex = _tag_format
|
213
|
+
.gsub("TAG", '(\w+)')
|
214
|
+
.gsub("COMMENT", '(.+)')
|
215
|
+
.gsub(' ' , '\s+')
|
212
216
|
|
217
|
+
_comment_regex = /^(?:\s*[#{_comment_type}]+\s*)+#{_tag_format_regex}/
|
218
|
+
|
219
|
+
debug_print "Comment regex: #{_comment_regex}\n"
|
213
220
|
|
214
221
|
# Open file and read in entire thing into an array
|
215
222
|
# Use an array so we can look ahead when creating issues later
|
@@ -245,7 +252,7 @@ module Watson
|
|
245
252
|
end
|
246
253
|
|
247
254
|
# Set tag
|
248
|
-
_tag = _mtch[1]
|
255
|
+
_tag = _mtch[1].downcase
|
249
256
|
|
250
257
|
# Make sure that the tag that was found is something we accept
|
251
258
|
# If not, skip it but tell user about an unrecognized tag
|
@@ -409,7 +416,8 @@ module Watson
|
|
409
416
|
'.el' => [';'], # Emacslisp
|
410
417
|
'.sqf' => ['//','/*'], # SQF
|
411
418
|
'.sqs' => [';'], # SQS
|
412
|
-
'.d' => ['//','/*']
|
419
|
+
'.d' => ['//','/*'], # D
|
420
|
+
'.tex' => ['%'] # LaTex
|
413
421
|
}
|
414
422
|
|
415
423
|
# Merge config file type list with defaults
|
data/lib/watson/version.rb
CHANGED
data/spec/config_spec.rb
CHANGED
@@ -86,10 +86,12 @@ describe Config do
|
|
86
86
|
@config.file_list.should == []
|
87
87
|
@config.tag_list.should == []
|
88
88
|
|
89
|
+
@config.tag_format.should == "[TAG] - COMMENT"
|
90
|
+
|
89
91
|
@config.remote_valid.should be_false
|
90
92
|
|
91
93
|
@config.github_valid.should be_false
|
92
|
-
@config.github_api.should ==
|
94
|
+
@config.github_api.should == Hash.new()
|
93
95
|
@config.github_repo.should == ''
|
94
96
|
@config.github_issues.should == Hash.new()
|
95
97
|
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watson-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nhmood
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: an inline issue manager with GitHub and Bitbucket support
|
@@ -59,8 +59,8 @@ executables:
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
- .gitignore
|
63
|
-
- .travis.yml
|
62
|
+
- ".gitignore"
|
63
|
+
- ".travis.yml"
|
64
64
|
- Gemfile
|
65
65
|
- Gemfile.lock
|
66
66
|
- LICENSE
|
@@ -104,17 +104,17 @@ require_paths:
|
|
104
104
|
- lib
|
105
105
|
required_ruby_version: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
|
-
- -
|
107
|
+
- - ">="
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: 2.0.0
|
110
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
111
|
requirements:
|
112
|
-
- -
|
112
|
+
- - ">="
|
113
113
|
- !ruby/object:Gem::Version
|
114
114
|
version: '0'
|
115
115
|
requirements: []
|
116
116
|
rubyforge_project:
|
117
|
-
rubygems_version: 2.0
|
117
|
+
rubygems_version: 2.2.0
|
118
118
|
signing_key:
|
119
119
|
specification_version: 4
|
120
120
|
summary: an inline issue manager
|