git-maintain 0.8.0 → 0.9.0

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: 136c6fd616fd9323ef37506bcc7202af21c5bc2577385a2e677fbbdc7f8422e3
4
- data.tar.gz: '00484af23fe00ab7ffbb573870b995831cf77ec3a547778f3eac9ba2d4860a42'
3
+ metadata.gz: 868f7d13ca258e469a2a32f892646f22486c006b2dd6cdd927a8df4ee349aaaf
4
+ data.tar.gz: ee9fabe23d3918015bd195d67ca36d528dba9d993574749134e338143d06429f
5
5
  SHA512:
6
- metadata.gz: 71ba39d5375653f3f53aae59b18184be822ebdedd9cfe600a43dd69becdc199c9703294c386b2477d03c0c802c58120a302a9a498d98d6c78bee75c287690596
7
- data.tar.gz: 3fe9143865048763682f696057ab7582a00cbf04a407775b3fb1046874301e0a1cf857e0d5eaee430a4f6b9bb52ff4f4a8fe5cd0057845bade1bfe6d008c4f57
6
+ metadata.gz: 306f260c676c76fc85d2bf87b797e3e8831cdcdd5fb0d847f3d7515e6b68ca35d271dd2348d6b1f850300c22a806be344b8eeeac382e9ed02ab19d3dabe18aab
7
+ data.tar.gz: c7a5aae40d1ab800006f6bc8aa9674eaced5a9acc5ec92a71e338d85a75e9e19768dce0be894b3a846c7976a5b2df189292c2973d31c86aadf0e9a9fdbd66a4e
data/CHANGELOG CHANGED
@@ -1,3 +1,16 @@
1
+ ------------------
2
+ 0.9.0 (2022-10-18)
3
+ ------------------
4
+
5
+ * Do not push branches already in stable to valid repository
6
+ * Add --yes support
7
+ * Add --base option for 'steal' command
8
+ * Add --no-edit option for 'release' command
9
+ * Enhance subcommands help/usage
10
+ * RDMACore updates
11
+ * Allow 'steal' to restart from a given SHA1
12
+ * Fix Github and Rybygem deployment
13
+
1
14
  ------------------
2
15
  0.8.0 (2020-03-04)
3
16
  ------------------
data/README.md CHANGED
@@ -282,7 +282,7 @@ This is a summary of all the settings that can be set in the git config:
282
282
  Unless otherwise stated, everything in this repo is covered by the following
283
283
  copyright notice:
284
284
 
285
- Copyright (c) 2018 SUSE
285
+ Copyright (c) 2022 SUSE
286
286
 
287
287
  This program is free software: you can redistribute it and/or modify it
288
288
  under the terms of the GNU General Public License version 3, as
data/bin/git-maintain CHANGED
@@ -11,17 +11,17 @@ $LOAD_PATH.pop()
11
11
 
12
12
  opts = {
13
13
  :br_suff => "master",
14
- :no => false,
14
+ :yn_default => nil,
15
15
  }
16
-
16
+ ACTION_HELPS = GitMaintain::getActionAttr("ACTION_HELP")
17
17
  actionParser = OptionParser.new(nil, 60)
18
18
  actionParser.banner = "Usage: #{__FILE__} <action> [action options]"
19
19
  actionParser.separator ""
20
20
  actionParser.separator "Options:"
21
21
  actionParser.on("-h", "--help", "Display usage.") { |val| puts actionParser.to_s; exit 0 }
22
22
  actionParser.separator "Possible actions:"
23
- GitMaintain::getActionAttr("ACTION_HELP").sort.each(){|x|
24
- actionParser.separator "\t " + x
23
+ ACTION_HELPS.each(){|k, x|
24
+ actionParser.separator "\t * " + k.to_s() + ": " + x
25
25
  }
26
26
  rest = actionParser.order!(ARGV);
27
27
  if rest.length <= 0 then
@@ -38,13 +38,16 @@ ARGV.shift()
38
38
 
39
39
  optsParser = OptionParser.new(nil, 60)
40
40
  optsParser.banner = "Usage: #{__FILE__} #{action_s} "
41
+ optsParser.separator "# " + ACTION_HELPS[action].to_s()
41
42
  optsParser.separator ""
42
43
  optsParser.separator "Options:"
43
44
  optsParser.on("-h", "--help", "Display usage.") { |val| puts optsParser.to_s; exit 0 }
44
45
  optsParser.on("-b", "--branch-suffix [SUFFIX]", "Branch suffix. Default is 'master'.") {
45
46
  |val| opts[:br_suff] = val}
46
47
  optsParser.on("-n", "--no", "Assume no to all questions.") {
47
- |val| opts[:no] = true}
48
+ |val| opts[:yn_default] = :no}
49
+ optsParser.on("-y", "--yes", "Assume yes to all questions.") {
50
+ |val| opts[:yn_default] = :yes}
48
51
  optsParser.on("--verbose", "Displays more informations.") {
49
52
  |val| GitMaintain::setVerbose(true)}
50
53
  GitMaintain::setOpts(action, optsParser, opts)
@@ -1,7 +1,7 @@
1
1
  module GitMaintain
2
2
  class RDMACoreBranch < Branch
3
3
  REPO_NAME = "rdma-core"
4
- AZURE_MIN_VERSION = 25
4
+ AZURE_MIN_VERSION = 18
5
5
 
6
6
  def self.set_opts(action, optsParser, opts)
7
7
  opts[:rel_type] = nil
@@ -16,8 +16,14 @@ module GitMaintain
16
16
  end
17
17
  def self.check_opts(opts)
18
18
  if opts[:action] == :release then
19
- if opts[:rel_type] == nil then
19
+ case opts[:rel_type]
20
+ when nil
20
21
  raise "No release type specified use --stable or --major"
22
+ when :major
23
+ if opts[:manual_branch] == nil then
24
+ GitMaintain::log(:INFO, "Major release selected. Auto-forcing branch to master")
25
+ opts[:manual_branch] = "master"
26
+ end
21
27
  end
22
28
  end
23
29
  end
@@ -65,9 +71,12 @@ module GitMaintain
65
71
  tag_file.puts `git log HEAD ^#{git_prev_ver} --no-merges --format=' * %s'`
66
72
  tag_file.close()
67
73
 
74
+ edit_flag = ""
75
+ edit_flag = "--edit" if opts[:no_edit] == false
76
+
68
77
  if opts[:rel_type] == :major
69
78
  # For major, tag the current version first
70
- @repo.runGitInteractive("tag -a -s v#{rel_ver} --edit -F #{tag_path}")
79
+ @repo.runGitInteractive("tag -a -s v#{rel_ver} #{edit_flag} -F #{tag_path}")
71
80
  if $? != 0 then
72
81
  raise("Failed to tag branch #{local_branch}")
73
82
  end
@@ -95,13 +104,13 @@ mv debian/changelog.new debian/changelog")
95
104
 
96
105
  # Add and commit
97
106
  @repo.runGit("add */*.spec CMakeLists.txt debian/changelog")
98
- @repo.runGitInteractive("commit -m '#{commit_msg} #{new_ver}' --verbose --edit --signoff")
107
+ @repo.runGitInteractive("commit -m '#{commit_msg} #{new_ver}' --verbose #{edit_flag} --signoff")
99
108
  if $? != 0 then
100
109
  raise("Failed to commit on branch #{local_branch}")
101
110
  end
102
111
 
103
112
  if opts[:rel_type] == :stable
104
- @repo.runGitInteractive("tag -a -s v#{rel_ver} --edit -F #{tag_path}")
113
+ @repo.runGitInteractive("tag -a -s v#{rel_ver} #{edit_flag} -F #{tag_path}")
105
114
  if $? != 0 then
106
115
  raise("Failed to tag branch #{local_branch}")
107
116
  end
@@ -110,7 +119,7 @@ mv debian/changelog.new debian/changelog")
110
119
  end
111
120
  end
112
121
  class RDMACoreRepo < Repo
113
- AZURE_MIN_VERSION = 25
122
+ AZURE_MIN_VERSION = 18
114
123
  def submitReleases(opts, new_tags)
115
124
  new_tags.each(){|tag|
116
125
  next if tag !~ /v([0-9]*)\.[0-9]*/
@@ -122,7 +131,7 @@ mv debian/changelog.new debian/changelog")
122
131
  end
123
132
 
124
133
  class RDMACoreCI < CI
125
- AZURE_MIN_VERSION = 25
134
+ AZURE_MIN_VERSION = 18
126
135
  def initialize(repo)
127
136
  super(repo)
128
137
  @travis = GitMaintain::TravisCI.new(repo)
@@ -0,0 +1,66 @@
1
+ module GitMaintain
2
+ class GitMaintainBranch < Branch
3
+ REPO_NAME = "git-maintain"
4
+
5
+ def release(opts)
6
+ prev_ver=@repo.runGit("show HEAD:CHANGELOG | grep -A 1 -- '---------' | head -n 2 | tail -n 1 | awk '{ print $1}'").chomp()
7
+ ver_nums = prev_ver.split(".")
8
+
9
+ if opts[:manual_branch] == nil then
10
+ new_ver = (ver_nums[0 .. -2] + [ver_nums[-1].to_i() + 1 ]).join(".")
11
+ git_prev_ver = "v" + (ver_nums[-1] == "0" ? ver_nums[0 .. -2].join(".") : prev_ver)
12
+ else
13
+ new_ver = (ver_nums[0 .. -3] + [ver_nums[-2].to_i() + 1 ] + [ "0" ]).join(".")
14
+ git_prev_ver = "v" + prev_ver
15
+ end
16
+
17
+ changes=@repo.runGit("show HEAD:CHANGELOG | awk ' BEGIN {count=0} {if ($1 == \"------------------\") count++; if (count == 0) print $0}'")
18
+
19
+ puts "Preparing release #{prev_ver} => #{new_ver}"
20
+ rep = GitMaintain::checkLog(opts, @local_branch, git_prev_ver, "release")
21
+ if rep != "y" then
22
+ puts "Skipping release"
23
+ return
24
+ end
25
+
26
+ # Prepare tag message
27
+ tag_path=`mktemp`.chomp()
28
+ puts tag_path
29
+ tag_file = File.open(tag_path, "w+")
30
+ tag_file.puts "git-maintain-#{new_ver}"
31
+ tag_file.puts ""
32
+ tag_file.puts changes
33
+ tag_file.close()
34
+
35
+ @repo.run("cat <<EOF > CHANGELOG.new
36
+ ------------------
37
+ #{new_ver} #{`date '+ (%Y-%m-%d)'`.chomp()}
38
+ ------------------
39
+
40
+ $(cat CHANGELOG)
41
+ EOF
42
+ mv CHANGELOG.new CHANGELOG")
43
+
44
+ # Add and commit
45
+ @repo.runGit("add CHANGELOG")
46
+ @repo.runGitInteractive("commit -F #{tag_path} --verbose --edit --signoff")
47
+ if $? != 0 then
48
+ raise("Failed to commit on branch #{local_branch}")
49
+ end
50
+ @repo.runGitInteractive("tag -a -s v#{new_ver} --edit -F #{tag_path}")
51
+ if $? != 0 then
52
+ raise("Failed to tag branch #{local_branch}")
53
+ end
54
+ `rm -f #{tag_path}`
55
+ end
56
+ end
57
+ class GitMaintainRepo < Repo
58
+ def initialize(path)
59
+ super(path)
60
+ @NOTIFY_RELEASE = false
61
+ end
62
+ end
63
+ GitMaintain::registerCustom(GitMaintainBranch::REPO_NAME,
64
+ { GitMaintain::Branch => GitMaintainBranch,
65
+ GitMaintain::Repo => GitMaintainRepo})
66
+ end
data/lib/azure.rb ADDED
@@ -0,0 +1,98 @@
1
+ module GitMaintain
2
+ class AzureCI < CI
3
+ AZURE_URL='https://dev.azure.com/'
4
+
5
+ def initialize(repo, stable='', valid='')
6
+ super(repo)
7
+ @url = AZURE_URL
8
+ @stable_org=stable
9
+ @valid_org=valid
10
+ end
11
+
12
+ private
13
+ def getState(sha1, resp)
14
+ br = findBranch(sha1, resp)
15
+ return "not found" if br == nil
16
+ return "running" if br["result"] == nil
17
+ return br["result"].to_s()
18
+ end
19
+ def getLog(sha1, resp)
20
+ str=""
21
+ # br = findBranch(sha1, resp)
22
+ # raise("Travis build not found") if br == nil
23
+ # job_id = br["id"].to_s()
24
+ # logs= getJson(@url, "azure_log_list" + job_id,
25
+ # @repo.name + "/_apis/build/builds/#{job_id}/logs?api-version=5.1")
26
+ # 1.upto(logs["count"]) { |x|
27
+ # log(:DEBUG_CI, "Downloading log file #{x}/#{logs["count"]}")
28
+ # nzstr = getJson(@url, "azure_log_" + job_id + '_' + x.to_s(),
29
+ # @repo.name + "/_apis/build/builds/#{job_id}/logs/#{x}?api-version=5.1", false)
30
+ # # This is zipped. We need to extract it
31
+ # }
32
+ return str
33
+ end
34
+ def getTS(sha1, resp)
35
+ br = findBranch(sha1, resp)
36
+ raise("Travis build not found") if br == nil
37
+ return br["started_at"]
38
+ end
39
+ def checkState(sha1, resp)
40
+ st = getState(sha1, resp)
41
+ return st == "passed" || st == "succeeded"
42
+ end
43
+
44
+ def getBrValidJson()
45
+ raise("Validation organisation not provided") if @valid_org == ''
46
+ return getJson(@url + @valid_org + '/',
47
+ :azure_br_valid, @repo.name + '/_apis/build/builds?api-version=5.1')
48
+ end
49
+ def getBrStableJson()
50
+ raise("Stable organisation not provided") if @stable_org == ''
51
+ return getJson(@url + @stable_org + '/',
52
+ :azure_br_stable, @repo.name + '/_apis/build/builds?api-version=5.1')
53
+ end
54
+ def findBranch(sha1, resp)
55
+ log(:DEBUG_CI, "Looking for build for #{sha1}")
56
+ resp["value"].each(){|br|
57
+ commit= br["sourceVersion"]
58
+ raise("Incomplete JSON received from Travis") if commit == nil
59
+ log(:DEBUG_CI, "Found entry for sha #{commit}")
60
+ next if commit != sha1
61
+ return br
62
+ }
63
+ return nil
64
+ end
65
+
66
+ public
67
+ def getValidState(br, sha1)
68
+ return getState(sha1, getBrValidJson())
69
+ end
70
+ def checkValidState(br, sha1)
71
+ return checkState(sha1, getBrValidJson())
72
+ end
73
+ def getValidLog(br, sha1)
74
+ return getLog(sha1, getBrValidJson())
75
+ end
76
+ def getValidTS(br, sha1)
77
+ return getTS(sha1, getBrValidJson())
78
+ end
79
+
80
+ def getStableState(br, sha1)
81
+ return getState(sha1, getBrStableJson())
82
+ end
83
+ def checkStableState(br, sha1)
84
+ return checkState(sha1, getBrStableJson())
85
+ end
86
+ def getStableLog(br, sha1)
87
+ return getLog(sha1, getBrStableJson())
88
+ end
89
+ def getStableTS(br, sha1)
90
+ return getTS(sha1, getBrStableJson())
91
+ end
92
+ def isErrored(br, status)
93
+ # https://docs.microsoft.com/en-us/rest/api/azure/devops/build/builds/list?
94
+ # view=azure-devops-rest-5.1#buildresult
95
+ return status == "failed"
96
+ end
97
+ end
98
+ end
data/lib/branch.rb CHANGED
@@ -24,21 +24,21 @@ module GitMaintain
24
24
  ALL_BRANCHES_ACTIONS = [
25
25
  :create
26
26
  ]
27
- ACTION_HELP = [
28
- "* cp: Backport commits and eventually push them to github",
29
- "* create: Create missing local branches from all the stable branches",
30
- "* delete: Delete all local branches using the suffix",
31
- "* steal: Steal commit from upstream that fixes commit in the branch or were tagged as stable",
32
- "* list: List commit present in the branch but not in the stable branch",
33
- "* list_stable: List commit present in the stable branch but not in the latest associated relase",
34
- "* merge: Merge branch with suffix specified in -m <suff> into the main branch",
35
- "* push: Push branches to github for validation",
36
- "* monitor: Check the CI state of all branches",
37
- "* push_stable: Push to stable repo",
38
- "* monitor_stable: Check the CI state of all stable branches",
39
- "* release: Create new release on all concerned branches",
40
- "* reset: Reset branch against upstream",
41
- ]
27
+ ACTION_HELP = {
28
+ :cp => "Backport commits and eventually push them to github",
29
+ :create => "Create missing local branches from all the stable branches",
30
+ :delete => "Delete all local branches using the suffix",
31
+ :steal => "Steal commit from upstream that fixes commit in the branch or were tagged as stable",
32
+ :list => "List commit present in the branch but not in the stable branch",
33
+ :list_stable => "List commit present in the stable branch but not in the latest associated relase",
34
+ :merge => "Merge branch with suffix specified in -m <suff> into the main branch",
35
+ :push => "Push branches to github for validation",
36
+ :monitor => "Check the CI state of all branches",
37
+ :push_stable => "Push to stable repo",
38
+ :monitor_stable => "Check the CI state of all stable branches",
39
+ :release => "Create new release on all concerned branches",
40
+ :reset => "Reset branch against upstream",
41
+ }
42
42
 
43
43
  def self.load(repo, version, ci, branch_suff)
44
44
  repo_name = File.basename(repo.path)
@@ -52,11 +52,12 @@ module GitMaintain
52
52
  opts[:do_merge] = false
53
53
  opts[:push_force] = false
54
54
  opts[:no_ci] = false
55
- opts[:all] = false
55
+ opts[:steal_base] = nil
56
56
  opts[:check_only] = false
57
57
  opts[:fetch] = nil
58
58
  opts[:watch] = false
59
59
  opts[:delete_remote] = false
60
+ opts[:no_edit] = false
60
61
 
61
62
  optsParser.on("-v", "--base-version [MIN_VER]", Integer, "Older release to consider.") {
62
63
  |val| opts[:base_ver] = val}
@@ -101,11 +102,17 @@ module GitMaintain
101
102
  |val| opts[:no_ci] = true}
102
103
  optsParser.on("-c", "--check", "Check if there is something to be pushed.") {
103
104
  |val| opts[:check_only] = true}
105
+ when :release
106
+ optsParser.on("--no-edit", "Do not edit release commit nor tag.") {
107
+ opts[:no_edit] = true }
104
108
  when :steal
105
- optsParser.banner += "[-a]"
109
+ optsParser.banner += "[-a][-b <HEAD>]"
106
110
  optsParser.on("-a", "--all", "Check all commits from master. "+
107
111
  "By default only new commits (since last successful run) are considered.") {
108
- |val| opts[:all] = true}
112
+ |val| opts[:steal_base] = :all}
113
+ optsParser.on("-b", "--base <HEAD>", "Check all commits from this commit. "+
114
+ "By default only new commits (since last successful run) are considered.") {
115
+ |val| opts[:steal_base] = val}
109
116
  end
110
117
  end
111
118
 
@@ -266,13 +273,23 @@ module GitMaintain
266
273
 
267
274
  # If we are not force checking everything,
268
275
  # try to start from the last tag we steal upto
269
- if opts[:all] != true then
270
- sha = @repo.runGit("rev-parse 'git-maintain/steal/last/#{@stable_base}' 2>&1")
271
- if $? == 0 then
272
- base_ref=sha
273
- log(:VERBOSE, "Starting from last successfull run:")
274
- log(:VERBOSE, @repo.getCommitHeadline(base_ref))
275
- end
276
+ case opts[:steal_base]
277
+ when nil
278
+ sha = @repo.runGit("rev-parse 'git-maintain/steal/last/#{@stable_base}' 2>&1")
279
+ if $? == 0 then
280
+ base_ref=sha
281
+ log(:VERBOSE, "Starting from last successfull run:")
282
+ log(:VERBOSE, @repo.getCommitHeadline(base_ref))
283
+ end
284
+ when :all
285
+ base_ref=@stable_base
286
+ else
287
+ sha = @repo.runGit("rev-parse #{opts[:steal_base]} 2>&1")
288
+ if $? == 0 then
289
+ base_ref=sha
290
+ log(:VERBOSE, "Starting from base:")
291
+ log(:VERBOSE, @repo.getCommitHeadline(base_ref))
292
+ end
276
293
  end
277
294
 
278
295
  master_sha=@repo.runGit("rev-parse origin/master")
@@ -333,8 +350,9 @@ module GitMaintain
333
350
 
334
351
  # Push the branch to the validation repo
335
352
  def push(opts)
336
- if same_sha?(@local_branch, @repo.valid_repo + "/" + @local_branch) then
337
- log(:INFO, "Nothing to push")
353
+ if same_sha?(@local_branch, @repo.valid_repo + "/" + @local_branch) ||
354
+ same_sha?(@local_branch, @remote_ref) then
355
+ log(:INFO, "Nothing to push on #{@local_branch}")
338
356
  return
339
357
  end
340
358
  return "#{@local_branch}:#{@local_branch}"
@@ -380,14 +398,14 @@ module GitMaintain
380
398
 
381
399
  # Push branch to the stable repo
382
400
  def push_stable(opts)
383
- if (opts[:no_ci] != true && @NO_CI != true) &&
384
- @ci.checkValidState(self, @head) != true then
385
- log(:WARNING, "Build is not passed on CI. Skipping push to stable")
401
+ if same_sha?(@local_branch, @remote_ref) then
402
+ log(:INFO, "Stable is already up-to-date")
386
403
  return
387
404
  end
388
405
 
389
- if same_sha?(@local_branch, @remote_ref) then
390
- log(:INFO, "Stable is already up-to-date")
406
+ if (opts[:no_ci] != true && @NO_CI != true) &&
407
+ @ci.checkValidState(self, @head) != true then
408
+ log(:WARNING, "Build is not passed on CI. Skipping push to stable")
391
409
  return
392
410
  end
393
411
 
@@ -452,6 +470,11 @@ module GitMaintain
452
470
 
453
471
  def delete(opts)
454
472
  if opts[:delete_remote] == true then
473
+ @repo.runGit("rev-parse --verify --quiet #{@repo.valid_repo}/#{@local_branch}")
474
+ if $? != 0 then
475
+ log(:DEBUG, "Skipping non existing remote branch #{@local_branch}.")
476
+ return
477
+ end
455
478
  msg = "delete remote branch #{@repo.valid_repo}/#{@local_branch}"
456
479
  else
457
480
  msg = "delete branch #{@local_branch}"
@@ -470,7 +493,7 @@ module GitMaintain
470
493
 
471
494
  return if branches.length == 0
472
495
  puts "Deleting #{opts[:delete_remote] == true ? "remote" : "local"} branches: #{branches.join(" ")}"
473
- rep = GitMaintain::confirm(opts, "continue")
496
+ rep = GitMaintain::confirm(opts, "continue", true)
474
497
  if rep != "y" then
475
498
  log(:INFO, "Cancelling")
476
499
  return
@@ -607,13 +630,18 @@ module GitMaintain
607
630
  puts @repo.getCommitHeadline(commit)
608
631
  while rep != "y" do
609
632
  puts "Do you want to steal this commit ? (y/n/b/?)"
610
- if opts[:no] == true then
633
+ case opts[:yn_default]
634
+ when :no
611
635
  log(:INFO, "Auto-replying no due to --no option")
612
636
  rep = 'n'
613
637
  break
638
+ when :yes
639
+ log(:INFO, "Auto-replying yes due to --yes option")
640
+ rep = 'y'
614
641
  else
615
642
  rep = STDIN.gets.chomp()
616
643
  end
644
+
617
645
  case rep
618
646
  when "n"
619
647
  log(:INFO, "Skip this commit")
data/lib/common.rb CHANGED
@@ -44,7 +44,7 @@ end
44
44
  module GitMaintain
45
45
  class Common
46
46
  ACTION_LIST = [ :list_actions ]
47
- ACTION_HELP = []
47
+ ACTION_HELP = {}
48
48
  def self.execAction(opts, action)
49
49
  puts GitMaintain::getActionAttr("ACTION_LIST").join("\n")
50
50
  end
@@ -94,7 +94,11 @@ module GitMaintain
94
94
  module_function :checkDirectConstructor
95
95
 
96
96
  def getActionAttr(attr)
97
- return ACTION_CLASS.map(){|x| x.const_get(attr)}.flatten()
97
+ if Common.const_get(attr).class == Hash
98
+ return ACTION_CLASS.inject({}){|h, x| h.merge(x.const_get(attr))}
99
+ else
100
+ return ACTION_CLASS.map(){|x| x.const_get(attr)}.flatten()
101
+ end
98
102
  end
99
103
  module_function :getActionAttr
100
104
 
@@ -138,13 +142,17 @@ module GitMaintain
138
142
  end
139
143
  module_function :execAction
140
144
 
141
- def confirm(opts, msg)
145
+ def confirm(opts, msg, ignore_default=false)
142
146
  rep = 't'
143
147
  while rep != "y" && rep != "n" && rep != '' do
144
148
  puts "Do you wish to #{msg} ? (y/N): "
145
- if opts[:no] == true then
149
+ case (ignore_default == true ? nil : opts[:yn_default])
150
+ when :no
146
151
  puts "Auto-replying no due to --no option"
147
152
  rep = 'n'
153
+ when :yes
154
+ puts "Auto-replying yes due to --yes option"
155
+ rep = 'y'
148
156
  else
149
157
  rep = STDIN.gets.chomp()
150
158
  end
@@ -155,7 +163,7 @@ module GitMaintain
155
163
 
156
164
  def checkLog(opts, br1, br2, action_msg)
157
165
  puts "Diff between #{br1} and #{br2}"
158
- puts `git shortlog #{br1} ^#{br2}`
166
+ puts `git log --format=oneline #{br1} ^#{br2}`
159
167
  return "n" if action_msg.to_s() == ""
160
168
  rep = confirm(opts, "#{action_msg} this branch")
161
169
  return rep
data/lib/repo.rb CHANGED
@@ -13,10 +13,10 @@ module GitMaintain
13
13
  # Internal commands for completion
14
14
  :list_suffixes, :submit_release
15
15
  ]
16
- ACTION_HELP = [
17
- "* submit_release: Push the to stable and create the release packages",
18
- "* summary: Displays a summary of the configuration and the branches git-maintain sees"
19
- ]
16
+ ACTION_HELP = {
17
+ :submit_release => "Push the tags to 'stable' remote and create the release packages",
18
+ :summary => "Displays a summary of the configuration and the branches git-maintain sees"
19
+ }
20
20
 
21
21
  def self.load(path=".")
22
22
  dir = Dir.pwd()
@@ -245,10 +245,6 @@ module GitMaintain
245
245
  mail.puts `git show #{tag} --no-decorate -q | awk '!p;/^-----END PGP SIGNATURE-----/{p=1}'`
246
246
  mail.puts ""
247
247
  }
248
- mail.puts "It's available at the normal places:"
249
- mail.puts ""
250
- mail.puts "git://github.com/#{@remote_stable}"
251
- mail.puts "https://github.com/#{@remote_stable}/releases"
252
248
  mail.close()
253
249
 
254
250
  case @mail_format
@@ -320,7 +316,7 @@ module GitMaintain
320
316
  end
321
317
 
322
318
  log(:WARNING, "This will officially release these tags: #{new_tags.join(", ")}")
323
- rep = GitMaintain::confirm(opts, "release them")
319
+ rep = GitMaintain::confirm(opts, "release them", true)
324
320
  if rep != 'y' then
325
321
  raise "Aborting.."
326
322
  end
@@ -330,7 +326,7 @@ module GitMaintain
330
326
  end
331
327
 
332
328
  log(:WARNING, "Last chance to cancel before submitting")
333
- rep= GitMaintain::confirm(opts, "submit these releases")
329
+ rep= GitMaintain::confirm(opts, "submit these releases", true)
334
330
  if rep != 'y' then
335
331
  raise "Aborting.."
336
332
  end
data/lib/travis.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module GitMaintain
2
2
  class TravisCI < CI
3
- TRAVIS_URL='https://api.travis-ci.org/'
3
+ TRAVIS_URL='https://api.travis-ci.com/'
4
4
 
5
5
  def initialize(repo)
6
6
  super(repo)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-maintain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas Morey-Chaisemartin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-04 00:00:00.000000000 Z
11
+ date: 2022-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: octokit
@@ -45,6 +45,8 @@ files:
45
45
  - bin/git-maintain
46
46
  - git-maintain-completion.sh
47
47
  - lib/addons/RDMACore.rb
48
+ - lib/addons/git-maintain.rb
49
+ - lib/azure.rb
48
50
  - lib/branch.rb
49
51
  - lib/ci.rb
50
52
  - lib/common.rb
@@ -52,7 +54,7 @@ files:
52
54
  - lib/travis.rb
53
55
  homepage: https://github.com/nmorey/git-maintain
54
56
  licenses:
55
- - GPLv3
57
+ - GPL-3.0
56
58
  metadata: {}
57
59
  post_install_message:
58
60
  rdoc_options: []
@@ -69,8 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
71
  - !ruby/object:Gem::Version
70
72
  version: '0'
71
73
  requirements: []
72
- rubyforge_project:
73
- rubygems_version: 2.7.7
74
+ rubygems_version: 3.0.8
74
75
  signing_key:
75
76
  specification_version: 4
76
77
  summary: Your ultimate script for maintaining stable branches and releasing your project.