sugarjar 0.0.9 → 0.0.10

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: 7b12b221b467eca9aeba30396d059870a82608120ce1739ded50b4aef55ce7ba
4
- data.tar.gz: c84bcab24de60fc61a0241f7c2940d6da6d78bc7416fa3fb92500528a447f9c8
3
+ metadata.gz: a1c65749738fac53cfb69c3ec42007433f7598e3e43dd36e33217c8c0efbbb2e
4
+ data.tar.gz: 50288abc1d21962e793731a937a8dd886bd2674db269ed62fbb0f89bb4121850
5
5
  SHA512:
6
- metadata.gz: e041cd65eb939ea1d2153bf13a8a019e05f194fcf6ce4326c69d62a2de9e34e1d036cf759c5ea17b5b42d8e7e159fc99d65ee75470580a4ed15a854fffc7c87f
7
- data.tar.gz: 2c47c2920b6a774ffb83ef16761183ac7dbfcc808a6885335bbeeee5470a29ceff343df4e3748897ab4e8e681e7c7d8b9a5fc3c7ed4d44fafaa40dda6c08b300
6
+ metadata.gz: 97ca2433bccc9e15d8c86ab141fa74e8f441f62cdb2be16e3131e2dcf71b37319ed0399990a96cb8c34ee4c55e75f1eca8a652cd5c7031f272493eec3fdb0f9a
7
+ data.tar.gz: 5395379c1ca16bc50c900cd75a4b72665c0079dfe48f8717d38640d4ba610cc571c5f407333e088c0c387f19dc620039e3a406f03d6d6ea4a72a7348b98e7a41
data/LICENSE CHANGED
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright [yyyy] [name of copyright owner]
189
+ Copyright 2020-present Phil Dibowitz
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
data/README.md CHANGED
@@ -244,8 +244,8 @@ yaml file is a straight key-value pair of options without their '--'. For
244
244
  example:
245
245
 
246
246
  ```yaml
247
- debug: true
248
- github-user: jaymzh
247
+ log_level: debug
248
+ github_user: jaymzh
249
249
  ```
250
250
 
251
251
  In addition, the environment variable `SUGARJAR_DEBUG` can be defined to set
@@ -312,6 +312,22 @@ sj clone jaymzh/sugarjar --github-host githuh.com
312
312
  We will add the `hub.host` to the `sugarjar` clone so that future `hub` or `sj`
313
313
  commands work without needing to specify..
314
314
 
315
+ ## Installing
316
+
317
+ There are many ways to install SugarJar. The easiest is to use one of the
318
+ packages we provide in the
319
+ [releases](https://github.com/jaymzh/sugarjar/releases) section. Currently we
320
+ provide packages for Fedora, CentOS, Debian, and Ubuntu, but if you want
321
+ others, file an Issue. Since these packages are
322
+ [omnibus](https://github.com/chef/omnibus) packages which means they are bundled
323
+ with all of their dependencies. This means these packages will likely work as-is
324
+ on later releases of these distros or any similar distros.
325
+
326
+ We also distribute SugarJar via [RubyGems](https://rubygems.org/gems/sugarjar/),
327
+ so you can install it as a gem either via system ruby or via rvm/rbenv.
328
+
329
+ Finally you can clone the git repo and run it from within the repo if you'd like.
330
+
315
331
  ## FAQ
316
332
 
317
333
  Why the name SugarJar?
data/bin/sj CHANGED
@@ -182,19 +182,23 @@ extra_opts = []
182
182
  config = SugarJar::Config.config
183
183
 
184
184
  valid_commands = sj.public_methods - Object.public_methods
185
-
186
- is_valid_command = ARGV.any? { |arg| valid_commands.include?(arg.to_s.to_sym) }
185
+ possible_valid_command = ARGV.any? do |arg|
186
+ valid_commands.include?(arg.to_s.to_sym)
187
+ end
187
188
 
188
189
  # if we're configured to fall thru and the subcommand isn't one
189
190
  # we recognize, don't parse the options as they may be different
190
191
  # than git's. For example `git config -l` - we error because we
191
192
  # require an arguement to `-l`.
192
- if config['fallthru'] && !is_valid_command
193
+ if config['fallthru'] && !possible_valid_command
193
194
  SugarJar::Log.debug(
194
195
  'Skipping option parsing: fall-thru is set and we do not recognize ' +
195
196
  'any subcommands',
196
197
  )
197
198
  else
199
+ SugarJar::Log.debug(
200
+ 'We MIGHT have a valid command... parse-command line options',
201
+ )
198
202
  # We want to allow people to pass in extra args to be passed to
199
203
  # git commands, but OptionParser doesn't easily allow this. So we
200
204
  # loop over it, catching exceptions.
@@ -240,6 +244,7 @@ SugarJar::Log.level = options['log_level'].to_sym if options['log_level']
240
244
  sj = SugarJar::Commands.new(options)
241
245
 
242
246
  subcommand = argv_copy.reject { |x| x.start_with?('-') }.first
247
+ is_valid_command = valid_commands.include?(subcommand.to_sym)
243
248
  argv_copy.delete(subcommand)
244
249
  SugarJar::Log.debug("subcommand is #{subcommand}")
245
250
 
@@ -12,6 +12,8 @@ class SugarJar
12
12
  class Commands
13
13
  include SugarJar::Util
14
14
 
15
+ MAIN_BRANCHES = %w{master main}.freeze
16
+
15
17
  def initialize(options)
16
18
  SugarJar::Log.debug("Commands.initialize options: #{options}")
17
19
  @ghuser = options['github_user']
@@ -30,7 +32,7 @@ class SugarJar
30
32
  assert_in_repo
31
33
  SugarJar::Log.debug("Feature: #{name}, #{base}")
32
34
  die("#{name} already exists!") if all_branches.include?(name)
33
- base ||= most_master
35
+ base ||= most_main
34
36
  base_pieces = base.split('/')
35
37
  hub('fetch', base_pieces[0]) if base_pieces.length > 1
36
38
  hub('checkout', '-b', name, base)
@@ -57,8 +59,8 @@ class SugarJar
57
59
  assert_in_repo
58
60
  curr = current_branch
59
61
  all_branches.each do |branch|
60
- if branch == 'master'
61
- SugarJar::Log.debug('Skipping master')
62
+ if MAIN_BRANCHES.include?(branch)
63
+ SugarJar::Log.debug("Skipping #{branch}")
62
64
  next
63
65
  end
64
66
 
@@ -73,11 +75,11 @@ class SugarJar
73
75
  end
74
76
  end
75
77
 
76
- # Return to the branch we were on, or master
78
+ # Return to the branch we were on, or main
77
79
  if all_branches.include?(curr)
78
80
  hub('checkout', curr)
79
81
  else
80
- hub('checkout', 'master')
82
+ checkout_main_branch
81
83
  end
82
84
  end
83
85
 
@@ -105,7 +107,7 @@ class SugarJar
105
107
  assert_in_repo
106
108
  SugarJar::Log.info(hub(
107
109
  'log', '--graph', '--oneline', '--decorate', '--boundary',
108
- '--branches', "#{most_master}.."
110
+ '--branches', "#{most_main}.."
109
111
  ).stdout.chomp)
110
112
  end
111
113
 
@@ -113,13 +115,22 @@ class SugarJar
113
115
 
114
116
  def up
115
117
  assert_in_repo
118
+ # get a copy of our current branch, if rebase fails, we won't
119
+ # be able to determine it without backing out
120
+ curr = current_branch
116
121
  result = gitup
117
- if result
118
- SugarJar::Log.info(
119
- "#{color(current_branch, :green)} rebased on #{result}",
122
+ if result['so'].error?
123
+ die(
124
+ "#{color(curr, :red)}: Failed to rebase on " +
125
+ "#{result['base']}. Leaving the repo as-is. You can get out of " +
126
+ 'this with a `git rebase --abort`. Output from failed rebase is: ' +
127
+ "\nSTDOUT:\n#{result['so'].stdout.lines.map { |x| "\t#{x}" }.join}" +
128
+ "\nSTDERR:\n#{result['so'].stderr.lines.map { |x| "\t#{x}" }.join}",
120
129
  )
121
130
  else
122
- die("#{color(current_branch, :red)}: Failed to rebase")
131
+ SugarJar::Log.info(
132
+ "#{color(current_branch, :green)} rebased on #{result['base']}",
133
+ )
123
134
  end
124
135
  end
125
136
 
@@ -139,20 +150,21 @@ class SugarJar
139
150
  def upall
140
151
  assert_in_repo
141
152
  all_branches.each do |branch|
142
- next if branch == 'master'
153
+ next if MAIN_BRANCHES.include?(branch)
143
154
 
144
155
  hub('checkout', branch)
145
156
  result = gitup
146
- if result
147
- SugarJar::Log.info(
148
- "#{color(branch, :green)} rebased on #{color(result, :green)}",
149
- )
150
- else
157
+ if result['so'].error?
151
158
  SugarJar::Log.error(
152
159
  "#{color(branch, :red)} failed rebase. Reverting attempt and " +
153
- 'moving to next branch',
160
+ 'moving to next branch. Try `sj up` manually on that branch.',
154
161
  )
155
162
  hub('rebase', '--abort')
163
+ else
164
+ SugarJar::Log.info(
165
+ "#{color(branch, :green)} rebased on " +
166
+ color(result['base'], :green).to_s,
167
+ )
156
168
  end
157
169
  end
158
170
  end
@@ -180,12 +192,26 @@ class SugarJar
180
192
 
181
193
  s = hub_nofail('fork', '--remote-name=origin')
182
194
  if s.error?
183
- # if the fork command failed, we already have one, so we have
184
- # to swap the remote names ourselves
185
- # newer 'hub's don't fail and do the right thing...
186
- SugarJar::Log.info("Fork (#{@ghuser}/#{reponame}) detected.")
187
- hub('remote', 'rename', 'origin', 'upstream')
188
- hub('remote', 'add', 'origin', forked_repo(repo, @ghuser))
195
+ if s.stdout.include?('SAML enforcement')
196
+ SugarJar::Log.info(
197
+ 'Forking the repo failed because the repo requires SAML ' +
198
+ "authentication. Full output:\n\n\t#{s.stdout}",
199
+ )
200
+ exit(1)
201
+ else
202
+ # In old versions of hub, it would fail if the upstream fork
203
+ # already existed. If we got an error, but didn't recognize
204
+ # that, we'll assume that's what happened and try to add the
205
+ # remote ourselves.
206
+ SugarJar::Log.info("Fork (#{@ghuser}/#{reponame}) detected.")
207
+ SugarJar::Log.debug(
208
+ 'The above is a bit of a lie. "hub" failed to fork and it was ' +
209
+ 'not a SAML error, so our best guess is that a fork exists ' +
210
+ 'and so we will try to configure it.',
211
+ )
212
+ hub('remote', 'rename', 'origin', 'upstream')
213
+ hub('remote', 'add', 'origin', forked_repo(repo, @ghuser))
214
+ end
189
215
  else
190
216
  SugarJar::Log.info("Forked #{reponame} to #{@ghuser}")
191
217
  end
@@ -461,14 +487,22 @@ class SugarJar
461
487
  die('sugarjar must be run from inside a git repo') unless in_repo
462
488
  end
463
489
 
490
+ def main_branch
491
+ @main_branch = all_branches.include?('main') ? 'main' : 'master'
492
+ end
493
+
494
+ def checkout_main_branch
495
+ hub('checkout', main_branch)
496
+ end
497
+
464
498
  def clean_branch(name)
465
- die('Cannot remove master branch') if name == 'master'
499
+ die("Cannot remove #{name} branch") if MAIN_BRANCHES.include?(name)
466
500
  SugarJar::Log.debug('Fetch relevant remote...')
467
501
  fetch_upstream
468
502
  return false unless safe_to_clean(name)
469
503
 
470
504
  SugarJar::Log.debug('branch deemed safe to delete...')
471
- hub('checkout', 'master')
505
+ checkout_main_branch
472
506
  hub('branch', '-D', name)
473
507
  gitup
474
508
  true
@@ -477,8 +511,6 @@ class SugarJar
477
511
  def all_branches
478
512
  branches = []
479
513
  hub('branch', '--format', '%(refname)').stdout.lines.each do |line|
480
- next if line == 'master'
481
-
482
514
  branches << line.strip.split('/')[2]
483
515
  end
484
516
  branches
@@ -502,7 +534,7 @@ class SugarJar
502
534
 
503
535
  # if the "easy" check didn't work, it's probably because there
504
536
  # was a squash-merge. To check for that we make our own squash
505
- # merge to upstream/master and see if that has any delta
537
+ # merge to upstream/main and see if that has any delta
506
538
 
507
539
  # First we need a temp branch to work on
508
540
  tmpbranch = "_sugar_jar.#{Process.pid}"
@@ -512,7 +544,7 @@ class SugarJar
512
544
  if s.error?
513
545
  cleanup_tmp_branch(tmpbranch, branch)
514
546
  SugarJar::Log.debug(
515
- 'Failed to merge changes into current master. This means we could ' +
547
+ 'Failed to merge changes into current main. This means we could ' +
516
548
  'not figure out if this is merged or not. Check manually and use ' +
517
549
  "'git branch -D #{branch}' if it is safe to do so.",
518
550
  )
@@ -530,7 +562,7 @@ class SugarJar
530
562
  true
531
563
  else
532
564
  SugarJar::Log.debug(
533
- 'After squash-merging, this branch is NOT fully merged to master',
565
+ 'After squash-merging, this branch is NOT fully merged to main',
534
566
  )
535
567
  false
536
568
  end
@@ -555,9 +587,8 @@ class SugarJar
555
587
  SugarJar::Log.debug('Fetching upstream')
556
588
  fetch_upstream
557
589
  curr = current_branch
558
- SugarJar::Log.debug('Rebasing')
559
590
  base = tracked_branch
560
- if curr != 'master' && base == "origin/#{curr}"
591
+ if !MAIN_BRANCHES.include?(curr) && base == "origin/#{curr}"
561
592
  SugarJar::Log.warn(
562
593
  "This branch is tracking origin/#{curr}, which is probably your " +
563
594
  'downstream (where you push _to_) as opposed to your upstream ' +
@@ -566,8 +597,12 @@ class SugarJar
566
597
  'to do a "git branch -u upstream".',
567
598
  )
568
599
  end
600
+ SugarJar::Log.debug('Rebasing')
569
601
  s = hub_nofail('rebase', base)
570
- s.error? ? nil : base
602
+ {
603
+ 'so' => s,
604
+ 'base' => base,
605
+ }
571
606
  end
572
607
 
573
608
  def tracked_branch
@@ -575,18 +610,18 @@ class SugarJar
575
610
  'rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{u}'
576
611
  )
577
612
  if s.error?
578
- most_master
613
+ most_main
579
614
  else
580
615
  s.stdout.strip
581
616
  end
582
617
  end
583
618
 
584
- def most_master
619
+ def most_main
585
620
  us = upstream
586
621
  if us
587
- "#{us}/master"
622
+ "#{us}/#{main_branch}"
588
623
  else
589
- master
624
+ main_branch
590
625
  end
591
626
  end
592
627
 
@@ -1,3 +1,3 @@
1
1
  class SugarJar
2
- VERSION = '0.0.9'.freeze
2
+ VERSION = '0.0.10'.freeze
3
3
  end
data/sugarjar.gemspec CHANGED
@@ -20,4 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.add_dependency 'mixlib-log'
21
21
  spec.add_dependency 'mixlib-shellout'
22
22
  spec.add_dependency 'pastel'
23
+ spec.metadata = {
24
+ 'rubygems_mfa_required' => 'true',
25
+ }
23
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sugarjar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phil Dibowitz
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-21 00:00:00.000000000 Z
11
+ date: 2022-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-log
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description:
55
+ description:
56
56
  email:
57
57
  - phil@ipom.com
58
58
  executables:
@@ -78,8 +78,9 @@ files:
78
78
  homepage: https://github.com/jaymzh/sugarjar
79
79
  licenses:
80
80
  - Apache-2.0
81
- metadata: {}
82
- post_install_message:
81
+ metadata:
82
+ rubygems_mfa_required: 'true'
83
+ post_install_message:
83
84
  rdoc_options: []
84
85
  require_paths:
85
86
  - lib
@@ -94,8 +95,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
95
  - !ruby/object:Gem::Version
95
96
  version: '0'
96
97
  requirements: []
97
- rubygems_version: 3.2.5
98
- signing_key:
98
+ rubygems_version: 3.3.15
99
+ signing_key:
99
100
  specification_version: 4
100
101
  summary: A git/github helper script
101
102
  test_files: []