summaryrefslogtreecommitdiffstats
path: root/git
diff options
context:
space:
mode:
authorMatt Woodson <mwoodson@gmail.com>2016-01-20 15:01:38 -0500
committerMatt Woodson <mwoodson@gmail.com>2016-01-20 15:01:38 -0500
commit9410cdff9342fae80a3149c530b819e473996cce (patch)
treecf26be9b05f3b97dbdafb7bae109b0707da0a0d4 /git
parenta2b745039bce597d419b03fdce39b4c6c69139f6 (diff)
parentbdedb63403ea582c4aaa5f56caed302f51744de2 (diff)
downloadopenshift-9410cdff9342fae80a3149c530b819e473996cce.tar.gz
openshift-9410cdff9342fae80a3149c530b819e473996cce.tar.bz2
openshift-9410cdff9342fae80a3149c530b819e473996cce.tar.xz
openshift-9410cdff9342fae80a3149c530b819e473996cce.zip
Merge pull request #1247 from openshift/master
Merge master into prod
Diffstat (limited to 'git')
-rwxr-xr-xgit/parent.rb45
-rwxr-xr-xgit/yaml_validation.py (renamed from git/yaml_validate.py)21
-rwxr-xr-xgit/yaml_validation.rb72
3 files changed, 13 insertions, 125 deletions
diff --git a/git/parent.rb b/git/parent.rb
deleted file mode 100755
index 2acb127c4..000000000
--- a/git/parent.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env ruby
-#
-#
-#
-
-if __FILE__ == $0
- # If we aren't on master we don't need to parent check
- branch = 'prod'
- exit(0) if ARGV[0] !~ /#{branch}/
- commit_id = ARGV[1]
- %x[/usr/bin/git checkout #{branch}]
- %x[/usr/bin/git merge #{commit_id}]
-
- count = 0
- #lines = %x[/usr/bin/git rev-list --left-right stg...master].split("\n")
- lines = %x[/usr/bin/git rev-list --left-right remotes/origin/stg...#{branch}].split("\n")
- lines.each do |commit|
- # next if they are in stage
- next if commit =~ /^</
- # remove the first char '>'
- commit = commit[1..-1]
- # check if any remote branches contain $commit
- results = %x[/usr/bin/git branch -q -r --contains #{commit} 2>/dev/null ]
- # if this comes back empty, nothing contains it, we can skip it as
- # we have probably created the merge commit here locally
- next if results.empty?
-
- # The results generally contain origin/pr/246/merge and origin/pr/246/head
- # this is the pull request which would contain the commit in question.
- #
- # If the results do not contain origin/stg then stage does not contain
- # the commit in question. Therefore we need to alert!
- unless results =~ /origin\/stg/
- puts "\nFAILED: (These commits are not in stage.)\n"
- puts "\t#{commit}"
- count += 1
- end
- end
-
- # Exit with count of commits in #{branch} but not stg
- exit(count)
-end
-
-__END__
-
diff --git a/git/yaml_validate.py b/git/yaml_validation.py
index 7e0a08a4b..94b8b0435 100755
--- a/git/yaml_validate.py
+++ b/git/yaml_validation.py
@@ -8,7 +8,6 @@ python yaml validator for a git commit
import shutil
import sys
import os
-import glob
import tempfile
import subprocess
import yaml
@@ -17,8 +16,8 @@ def get_changes(oldrev, newrev, tempdir):
'''Get a list of git changes from oldrev to newrev'''
proc = subprocess.Popen(['/usr/bin/git', 'diff', '--name-only', oldrev,
newrev, '--diff-filter=ACM'], stdout=subprocess.PIPE)
- proc.wait()
- files = proc.stdout.read().strip().split('\n')
+ stdout, _ = proc.communicate()
+ files = stdout.split('\n')
# No file changes
if not files:
@@ -26,9 +25,14 @@ def get_changes(oldrev, newrev, tempdir):
cmd = '/usr/bin/git archive %s %s | /bin/tar x -C %s' % (newrev, " ".join(files), tempdir)
proc = subprocess.Popen(cmd, shell=True)
- proc.wait()
+ _, _ = proc.communicate()
- return [fmod for fmod in glob.glob('%s/**/*' % tempdir) if not os.path.isdir(fmod)]
+ rfiles = []
+ for dirpath, _, fnames in os.walk(tempdir):
+ for fname in fnames:
+ rfiles.append(os.path.join(dirpath, fname))
+
+ return rfiles
def main():
'''
@@ -43,15 +47,15 @@ def main():
print "+++++++ Received: %s" % file_mod
- if not file_mod.endswith('.yml') or not file_mod.endswith('.yaml'):
+ if not file_mod.endswith('.yml') and not file_mod.endswith('.yaml'):
continue
try:
- yaml.load(file_mod)
+ yaml.load(open(file_mod))
results.append(True)
except yaml.scanner.ScannerError as yerr:
- print yerr.message
+ print yerr
results.append(False)
finally:
shutil.rmtree(tmpdir)
@@ -61,3 +65,4 @@ def main():
if __name__ == "__main__":
main()
+
diff --git a/git/yaml_validation.rb b/git/yaml_validation.rb
deleted file mode 100755
index f5ded7a78..000000000
--- a/git/yaml_validation.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env ruby
-#
-#
-#
-require 'yaml'
-require 'tmpdir'
-
-class YamlValidate
- def self.yaml_file?(filename)
- return filename.end_with?('.yaml') || filename.end_with?('.yml')
- end
-
- def self.short_yaml_ext?(filename)
- return filename.end_with?(".yml")
- end
-
- def self.valid_yaml?(filename)
- YAML::load_file(filename)
-
- return true
- end
-end
-
-class GitCommit
- attr_accessor :oldrev, :newrev, :refname, :tmp
- def initialize(oldrev, newrev, refname)
- @oldrev = oldrev
- @newrev = newrev
- @refname = refname
- @tmp = Dir.mktmpdir(@newrev)
- end
-
- def get_file_changes()
- files = %x[/usr/bin/git diff --name-only #{@oldrev} #{@newrev} --diff-filter=ACM].split("\n")
-
- # if files is empty we will get a full checkout. This happens on
- # a git rm file. If there are no changes then we need to skip the archive
- return [] if files.empty?
-
- # We only want to take the files that changed. Archive will do that when passed
- # the filenames. It will export these to a tmp dir
- system("/usr/bin/git archive #{@newrev} #{files.join(" ")} | tar x -C #{@tmp}")
- return Dir.glob("#{@tmp}/**/*").delete_if { |file| File.directory?(file) }
- end
-end
-
-if __FILE__ == $0
- while data = STDIN.gets
- oldrev, newrev, refname = data.split
- gc = GitCommit.new(oldrev, newrev, refname)
-
- results = []
- gc.get_file_changes().each do |file|
- begin
- puts "++++++ Received: #{file}"
-
- #raise "Yaml file extensions must be .yaml not .yml" if YamlValidate.short_yaml_ext? file
-
- # skip readme, other files, etc
- next unless YamlValidate.yaml_file?(file)
-
- results << YamlValidate.valid_yaml?(file)
- rescue Exception => ex
- puts "\n#{ex.message}\n\n"
- results << false
- end
- end
-
- #puts "RESULTS\n#{results.inspect}\n"
- exit 1 if results.include?(false)
- end
-end