Class | RSCM::ClearCase |
In: |
lib/rscm/scm/clearcase.rb
|
Parent: | Base |
LOG_FORMAT | = | "- !ruby/object:RSCM::RevisionFile\\n developer: %u\\n time: \\\"%Nd\\\"\\n native_revision_identifier: %Vn\\n previous_native_revision_identifier: %PVn\\n path: %En\\n status: %o\\n message: \\\"%Nc\\\"\\n\\n" |
TIME_FORMAT | = | "%d-%b-%Y.%H:%M:%S" |
MAGIC_TOKEN | = | "9q8w7e6r5t4y" |
STATUSES | = | { "checkin" => RevisionFile::MODIFIED, "mkelem" => RevisionFile::ADDED, "rmelem" => RevisionFile::DELETED, } |
DEFAULT_CONFIG_SPEC | = | "element * CHECKEDOUT\nelement * /main/LATEST" |
config_spec | [RW] | |
stgloc | [RW] | |
stream | [RW] | |
tag | [RW] |
# File lib/rscm/scm/clearcase.rb, line 21 21: def initialize(stream=nil, stgloc=nil, tag=nil, config_spec=DEFAULT_CONFIG_SPEC) 22: @stream, @stgloc, @tag, @config_spec = stream, stgloc, tag, config_spec 23: end
# File lib/rscm/scm/clearcase.rb, line 107 107: def catcs 108: Dir.chdir(checkout_dir) do 109: catcs_cmd = "cleartool catcs" 110: Better.popen(catcs_cmd) do |io| 111: yield io 112: end 113: end 114: end
# File lib/rscm/scm/clearcase.rb, line 66 66: def checked_out? 67: !Dir["#{checkout_dir}/*"].empty? 68: end
# File lib/rscm/scm/clearcase.rb, line 70 70: def destroy_working_copy 71: Better.popen("cleartool rmview #{checkout_dir}") do |io| 72: io.read 73: end 74: end
# File lib/rscm/scm/clearcase.rb, line 76 76: def import_central(dir, message) 77: Better.popen("clearfsimport -recurse -nsetevent #{dir} #{checkout_dir}") do |io| 78: io.read 79: end 80: end
What‘s loaded into view
# File lib/rscm/scm/clearcase.rb, line 125 125: def load_rules 126: result = [] 127: catcs do |io| 128: io.each_line do |line| 129: if(line =~ /^load[\s]*(.*)$/) 130: return result << $1 131: end 132: end 133: end 134: result 135: end
Non-RSCM API methods
# File lib/rscm/scm/clearcase.rb, line 84 84: def mkview! 85: # Create view (working copy) 86: mkview_cmd = "cleartool mkview -snapshot -stream #{@stream} -stgloc #{@stgloc} -tag #{@tag} #{@checkout_dir}" 87: Better.popen(mkview_cmd) do |io| 88: puts io.read 89: end 90: end
# File lib/rscm/scm/clearcase.rb, line 25 25: def revisions(from_identifier, to_identifier=Time.infinity, relative_path=nil) 26: checkout unless checked_out? 27: rules = load_rules 28: vob = vob(rules[0]) 29: result = Revisions.new 30: 31: unless vob 32: STDERR.puts "No vob found. Please set load rules in the view: #{checkout_dir}" 33: return result 34: end 35: with_working_dir(checkout_dir) do 36: since = (from_identifier + 1).strftime(TIME_FORMAT) 37: cmd = "cleartool lshistory -recurse -nco -since #{since} -fmt \"#{LOG_FORMAT}\" -pname #{vob}" 38: Better.popen(cmd) do |io| 39: # escape all quotes, except the one at the beginning and end. this is a bit ugly... 40: raw_yaml = io.read 41: fixed_yaml = raw_yaml.gsub(/^ message: \"/, " message: #{MAGIC_TOKEN}") 42: fixed_yaml = fixed_yaml.gsub(/\"\n\n/, "#{MAGIC_TOKEN}\n\n") 43: fixed_yaml = fixed_yaml.gsub(/\"/, "\\\"") 44: fixed_yaml = fixed_yaml.gsub(MAGIC_TOKEN, "\"") 45: 46: files = YAML.load(fixed_yaml) 47: files.each do |file| 48: file.path.gsub!(/\\/, "/") 49: file.status = STATUSES[file.status] 50: rev = revision(file.native_revision_identifier) 51: if(rev && matches_load_rules?(rules, file.path)) 52: file.native_revision_identifier = rev 53: file.previous_native_revision_identifier = revision(file.previous_native_revision_identifier) 54: t = file.time 55: # the time now has escaped quotes.. 56: file.time = Time.utc(t[2..5],t[6..7],t[8..9],t[11..12],t[13..14],t[15..16]) 57: file.message.strip! 58: result.add(file) 59: end 60: end 61: end 62: end 63: result 64: end
# File lib/rscm/scm/clearcase.rb, line 92 92: def update_load_rules! 93: Dir.chdir(checkout_dir) do 94: # tempfile is broken on windows (!!) 95: cfg_spec_file = "__rscm.cfgspec" 96: config_spec_file = File.open(cfg_spec_file, "w") do |io| 97: io.write(@config_spec) 98: end 99: 100: setcs_cmd = "cleartool setcs #{cfg_spec_file}" 101: Better.popen(setcs_cmd, "w") do |io| 102: io.write "yes\n" 103: end 104: end 105: end
# File lib/rscm/scm/clearcase.rb, line 116 116: def vob(load_rule) 117: if(load_rule =~ /[\\\/]*([\w]*)/) 118: $1 119: else 120: nil 121: end 122: end
# File lib/rscm/scm/clearcase.rb, line 139 139: def checkout_silent(to_identifier=nil) 140: if(checked_out?) 141: with_working_dir(checkout_dir) do 142: Better.popen("cleartool update .") do |io| 143: io.read 144: end 145: end 146: else 147: mkview! 148: 149: # Set load rules (by setting config spec) 150: #update_load_rules! 151: end 152: end