public
Description: Piston is a utility that eases vendor branch management. This repository is a complete reimplementation of Piston to provide different backends, depending on the repositories and working copies you pistonize from.
Homepage: http://piston.rubyforge.org/
Clone URL: git://github.com/francois/piston.git
commit  f072ac8ebaaff7803e10c7b0d77475cd1fd5875a
tree    39bb112382f104ba658fdfe6af0f850a4c86ecd1
parent  02a591a67bc50e748ef1dad08674f579b75c2565
piston / lib / piston / cli.rb
100644 110 lines (91 sloc) 3.024 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
require "main"
require "log4r"
require "piston/version"
require "piston/commands"
 
Main {
  program "piston"
  author "François Beausoleil <francois@teksol.info>"
  version Piston::VERSION::STRING
 
  mixin :standard_options do
    option("verbose", "v") { default false }
    option("quiet", "q") { default false }
    option("force") { default false }
    option("dry-run") { default false }
  end
 
  mixin :revision_or_commit do
    option "revision", "r" do
      argument_required
      default "HEAD"
      description "The revision you wish to operate on"
    end
 
    option "commit" do
      argument_required
      default "HEAD"
      description "The commit you wish to operate on"
    end
 
    def target_revision
      case
      when params["revision"].given?
        params["revision"].value
      when params["commit"].given?
        params["commit"].value
      else
        :head
      end
    end
  end
 
  mode "import" do
    mixin :standard_options
    mixin :revision_or_commit
 
    argument "repository" do
      required
      description "The repository you wish to Pistonize"
    end
 
    argument "directory" do
      optional
      default nil
      description "Where to put the Pistonized repository"
    end
 
    option("lock") do
      default false
      description "Automatically lock down the revision/commit to protect against blanket updates"
    end
 
    logger_level Logger::DEBUG
    def run
      configure_logging!
 
      if params["revision"].given? && params["commit"].given? then
        raise ArgumentError, "Only one of --revision or --commit can be given. Received both."
      end
 
      cmd = Piston::Commands::Import.new(:lock => params["lock"].value,
                                         :verbose => params["verbose"].value,
                                         :quiet => params["quiet"].value,
                                         :force => params["force"].value,
                                         :dry_run => params["dry-run"].value)
      cmd.run(params[:repository].value, self.target_revision, params[:directory].value)
    end
  end
 
  option("version", "v")
 
  def run
    if params["version"].given? || ARGV.first == "version" then
      puts Piston.version_message
      exit_success!
    elsif ARGV.empty?
      puts Piston.version_message
      puts "\nNo mode given. Call with help to find out the available options."
      exit_failure!
    else
      puts "Unrecognized mode: #{ARGV.first.inspect}. Use the help mode to find the available options."
      exit_warn!
    end
  end
 
  def configure_logging!
    Log4r::Logger.root.level = Log4r::ALL
 
    Log4r::Logger.new("main")
    Log4r::Logger.new("handler")
    Log4r::Logger.new("handler::client")
 
    Log4r::StderrOutputter.new("stderr", :level => Log4r::WARN)
    Log4r::StdoutOutputter.new("stdout", :level => params["verbose"].value ? Log4r::DEBUG : Log4r::INFO)
 
    Log4r::Logger["main"].add "stdout", "stderr"
    Log4r::Logger["handler"].add "stdout", "stderr"
  end
}