#!/usr/bin/env ruby -w abort "#{File.basename $0} [proj] [user]" unless ARGV.grep(/^-?-h(elp)?/).empty? ENV['P4CONFIG'] = ".p4config" MIN, MAX = "10000000".to_i(36), "zzzzzzzz".to_i(36) proj = ARGV.shift || `hostname -s`.chomp user = ARGV.shift || `whoami`.chomp host = 'p4.zenspider.com' port = 1666 pass = (rand(MAX - MIN) + MIN).to_s(36) Dir.mkdir host Dir.chdir host do ENV['PWD'] = Dir.pwd # infuriating... File.open('.p4config', 'w') do |f| f.puts "P4PORT=#{host}:#{port}" f.puts "P4USER=#{user}" f.puts "P4PASSWD=#{pass}" f.puts "P4CLIENT=#{user}-#{proj}" f.puts "P4EDITOR=#{ENV['EDITOR'] || 'emacs'}" end users = `p4 users | cut -f1 -d\\ `.split unless users.include? user then print "What is your email address (no spam): " email = gets.chomp user_spec = `p4 user -o #{user}` user_spec += "Password:\t#{pass}\n\n" user_spec.sub!(/^Email:.*/, "Email:\t#{email}") IO.popen("p4 user -i", "w") do |p4| p4.puts user_spec end else puts "User #{user} exists" end client_spec = `p4 client -o -t template-src #{user}-#{proj}` client_spec.gsub!(/normdir/, 'rmdir') IO.popen("p4 client -i", "w") do |p4| p4.puts client_spec end puts unless system "p4 sync" then puts puts "you need to email the admin now to get permissions" puts "once you have permissions, continue with:" puts " cd #{Dir.pwd}; p4 sync" end end puts puts "REMEMBER: put 'export P4CONFIG=.p4config' in your .profile"