sugarjar 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95e4979017c0ed58f99c446d9215a6b64aec7d5ebc22694a95903710d5af9d7e
4
- data.tar.gz: b4b7a648bc7e8002e46dfbaa73cc52749cd38258b5782a2b33a6d66db98facfc
3
+ metadata.gz: d4282936baebdd165acf740d342b5f2e75a74dcaac6b77049842e903fe675957
4
+ data.tar.gz: f200b2404a6b61444b8846f0b67af1c43585daaab22b89d6e916f3a5fe9b3b3e
5
5
  SHA512:
6
- metadata.gz: 0e34735382f6646bf5fe1577eb6637ad7aaceaa9ccf2d2dad024d4a95f3e2a0e8ec080fe086fd5dae7354b3f15f83d26e6ae8b067a1fae9fb5b3da777f9e1f86
7
- data.tar.gz: 155d1aa1c7148f2d7181678f64ef64b17fb5efc90386ce3bd27c2bcc7b256113680b4e69a16558790ab3c77080325fc36a56c9f3cc76cf4962f8f575cd00d5d7
6
+ metadata.gz: aa37f43fbbfbd68bf3a43f58706add2a3ea981a257e41cea1b894077cad51f2f10a1d3e95d9968ea59518bbd5b6a739678bd123cd279ec67016856666521452b
7
+ data.tar.gz: 44a62d13863c21952264b4722a8fb6dd26fa3d1f548d7ab41f65d7dd0600c95f38fd333f49dfb0840734f9472ffa54050b6216a1140dc7edae2306d3b46b24b8
data/README.md CHANGED
@@ -5,12 +5,14 @@
5
5
  [![DCO](https://github.com/jaymzh/sugarjar/workflows/DCO%20Check/badge.svg)](https://github.com/jaymzh/sugarjar/actions?query=workflow%3A%22DCO+Check%22)
6
6
 
7
7
  > [!IMPORTANT]
8
- > You probably want to use [Sapling](https://sapling-scm.com/)
9
- > instead of this! This was written as a stop-gap to approximate some features
8
+ > If you are a _new_ user, I suggest looking at [Sapling](https://sapling-scm.com/)
9
+ > instead of this. This was written as a stop-gap to approximate some features
10
10
  > of the Facebook/Meta internal development tools before they were released.
11
- > Now that those tools have been open-sourced and work with GitHub, this is
12
- > likely to be deprecated at some point. Sapling is far more feature rich,
13
- > faster, and have more development resources behind them.
11
+ > Now that those tools have been open-sourced and work with GitHub, new users
12
+ > will likely want to start there. Sapling is far more feature rich, faster,
13
+ > and have more development resources behind them. SugarJar is a smaller
14
+ > transition, and for the time being I'm maintaining it for all existing users,
15
+ > and for those who may not yet be ready for the transition to Sapling.
14
16
 
15
17
  Welcome to SugarJar - a git/github helper. It needs one of the GitHub CLI's:
16
18
  either [gh](https://cli.github.com/) or the older [hub](https://hub.github.com/).
@@ -222,12 +224,20 @@ $ sj feature dependent-feature test-branch
222
224
  Created feature branch dependent-feature based on test-branch
223
225
  ```
224
226
 
227
+ Additionally you can specify a `feature_prefix` in your config which will cause
228
+ `feature` to create branches prefixed with your `feature_prefix` and will also
229
+ cause `co` to checkout branches with that prefix. This is useful when organizations
230
+ use branch-based workflows and branches need to be prefixed with e.g. `$USER/`.
231
+
232
+ For example, if your prefix was `user/`, then `sj feature foo` would create
233
+ `user/foo`, and `sj co foo` would switch to `user/foo`.
234
+
225
235
  ## Smartlog
226
236
 
227
237
  Smartlog will show you a tree diagram of your branches! Simply run `sj
228
238
  smartlog` or `sj sl` for short.
229
239
 
230
- ![smartlog screenshot](https://github.com/jaymzh/sugarjar/blob/master/smartlog.png)
240
+ ![smartlog screenshot](https://github.com/jaymzh/sugarjar/blob/main/smartlog.png)
231
241
 
232
242
  ## Pulling in suggestions from the web
233
243
 
@@ -317,6 +327,12 @@ how to handle repo-specific things. Currently there options are:
317
327
  * `commit_template` - A path to a commit template to set in the `commit.template`
318
328
  git config for this repo. Should be either a fully-qualified path, or a path
319
329
  relative to the repo root.
330
+ * `include_from` - This will read an additional repoconfig file and merge it
331
+ into the one being read. The value should be relative to the root of the
332
+ repo. This will not error if the file does not exist, it is intended for
333
+ organizations to allow users to optionally extend a default repo config.
334
+ * `overwrite_from` - Same as `include_from`, but completely overwrites the
335
+ base configuration if the file is found.
320
336
 
321
337
  Example configuration:
322
338
 
@@ -21,6 +21,7 @@ class SugarJar
21
21
  @ignore_dirty = options['ignore_dirty']
22
22
  @ignore_prerun_failure = options['ignore_prerun_failure']
23
23
  @repo_config = SugarJar::RepoConfig.config
24
+ SugarJar::Log.debug("Repoconfig: #{@repo_config}")
24
25
  @color = options['color']
25
26
  @feature_prefix = options['feature_prefix']
26
27
  @checks = {}
@@ -95,6 +96,15 @@ class SugarJar
95
96
 
96
97
  def co(*args)
97
98
  assert_in_repo
99
+ # Pop the last arguement, which is _probably_ a branch name
100
+ # and then add any featureprefix, and if _that_ is a branch
101
+ # name, replace the last arguement with that
102
+ name = args.last
103
+ bname = fprefix(name) unless all_local_branches.include?(name)
104
+ if all_local_branches.include?(bname)
105
+ SugarJar::Log.debug("Featurepefixing #{name} -> #{bname}")
106
+ args[-1] = bname
107
+ end
98
108
  s = git('checkout', *args)
99
109
  SugarJar::Log.info(s.stderr + s.stdout.chomp)
100
110
  end
@@ -296,7 +306,7 @@ class SugarJar
296
306
  end
297
307
  if gh?
298
308
  SugarJar::Log.trace("Running: gh pr create #{args.join(' ')}")
299
- system(which('gh'), 'pr', 'create', *args)
309
+ system(which('gh'), 'pr', 'create', '--fill', *args)
300
310
  else
301
311
  SugarJar::Log.trace("Running: hub pull-request #{args.join(' ')}")
302
312
  system(which('hub'), 'pull-request', *args)
@@ -553,7 +563,12 @@ class SugarJar
553
563
  SugarJar::Log.debug("Running #{type} #{check}")
554
564
 
555
565
  short = check.split.first
556
- unless File.exist?(short)
566
+ if short.include?('/')
567
+ short = File.join(repo_root, short) unless short.start_with?('/')
568
+ unless File.exist?(short)
569
+ SugarJar::Log.error("Configured #{type} #{short} does not exist!")
570
+ end
571
+ elsif !which_nofail(short)
557
572
  SugarJar::Log.error("Configured #{type} #{short} does not exist!")
558
573
  return false
559
574
  end
@@ -1,6 +1,7 @@
1
1
  require_relative 'util'
2
2
  require_relative 'log'
3
3
  require 'yaml'
4
+ require 'deep_merge'
4
5
 
5
6
  class SugarJar
6
7
  # This parses SugarJar repoconfigs (not to be confused with configs).
@@ -10,23 +11,40 @@ class SugarJar
10
11
 
11
12
  CONFIG_NAME = '.sugarjar.yaml'.freeze
12
13
 
13
- def self.repo_config
14
- ::File.join(repo_root, CONFIG_NAME)
14
+ def self.repo_config_path(config)
15
+ ::File.join(repo_root, config)
15
16
  end
16
17
 
17
- def self.config
18
+ def self.hash_from_file(config_file)
19
+ SugarJar::Log.debug("Loading repo config: #{config_file}")
20
+ YAML.safe_load(File.read(config_file))
21
+ end
22
+
23
+ # wrapper for File.exist to make unittests easier
24
+ def self.config_file?(config_file)
25
+ File.exist?(config_file)
26
+ end
27
+
28
+ def self.config(config = CONFIG_NAME)
29
+ data = {}
18
30
  unless in_repo
19
31
  SugarJar::Log.debug('Not in repo, skipping repoconfig load')
20
- return {}
32
+ return data
21
33
  end
22
- config = repo_config
23
- if File.exist?(config)
24
- SugarJar::Log.debug("Loading repo config: #{config}")
25
- YAML.safe_load(File.read(repo_config))
26
- else
27
- SugarJar::Log.debug("No repo config (#{config}), returning empty hash")
28
- {}
34
+ config_file = repo_config_path(config)
35
+ data = hash_from_file(config_file) if config_file?(config_file)
36
+ if data['overwrite_from'] && config_file?(data['overwrite_from'])
37
+ SugarJar::Log.debug(
38
+ "Attempting overwrite_from #{data['overwrite_from']}",
39
+ )
40
+ data = config(data['overwrite_from'])
41
+ data.delete('overwrite_from')
42
+ elsif data['include_from'] && config_file?(data['include_from'])
43
+ SugarJar::Log.debug("Attempting include_from #{data['include_from']}")
44
+ data.deep_merge!(config(data['include_from']))
45
+ data.delete('include_from')
29
46
  end
47
+ data
30
48
  end
31
49
  end
32
50
  end
@@ -1,3 +1,3 @@
1
1
  class SugarJar
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '1.0.1'.freeze
3
3
  end
data/sugarjar.gemspec CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
17
17
  Dir.glob('bin/*') +
18
18
  docs
19
19
 
20
+ spec.add_dependency 'deep_merge'
20
21
  spec.add_dependency 'mixlib-log'
21
22
  spec.add_dependency 'mixlib-shellout'
22
23
  spec.add_dependency 'pastel'
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sugarjar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phil Dibowitz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-23 00:00:00.000000000 Z
11
+ date: 2023-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: deep_merge
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: mixlib-log
15
29
  requirement: !ruby/object:Gem::Requirement