disloku 0.4.0 → 0.5.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
  SHA1:
3
- metadata.gz: bf136697293ab97e26248c87878fc31f0cd6b12b
4
- data.tar.gz: cfada9605a593237c98add5e05ee495c9478df98
3
+ metadata.gz: df3df4e4387e6a88f82dbb55189ac71b7774e6db
4
+ data.tar.gz: 53658b6566ee5c871f6fd8b45fe6081de894081c
5
5
  SHA512:
6
- metadata.gz: efb0820d1c241f39aa8d178e8cc19824e80d31f5f11e1bd1594de56885df268e73add14d5f7a483a3a08cf41aebfd96e5c521a7444316227f5a30f0d47ba4464
7
- data.tar.gz: e988e227b042f025c133ffc3ab3b9de7489ae7e58c889786e0a462ac33deb9a2076d3a2cbf0713dbf2255a8c3d52aa8b884f9cb397b70be066c2a2948011ac72
6
+ metadata.gz: b45fb10023f1843931bec38c0c52f200e6294a4756bb3083c1ef9500f9f2f7092e1f1f1007dfc34c0a035a517427530ad4bb4c722b262d86e55635ffd994447f
7
+ data.tar.gz: cdc37da67c74c182c6845d9fa41f6b48726f5648d6e1ca94753463f0dba12869b03547b8826ac50aed717594a31ca0fca0af03b02963ba4e160a84eca2627475
data/bin/disloku CHANGED
@@ -1,8 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require('disloku')
4
- begin
5
- DislokuCli.start()
6
- rescue Interrupt => e
7
- $stderr.puts("Disloku was killed with CTRL+C")
8
- end
4
+ DislokuCli.run()
@@ -0,0 +1,11 @@
1
+ options:
2
+ ignoreDeleteErrors: true
3
+ targets:
4
+ dummy:
5
+ connection:
6
+ host: sample.org
7
+ user: example
8
+ branchLock: master
9
+ targetDir: "/home/example/target"
10
+ default:
11
+ targets: [dummy]
@@ -1,10 +1,4 @@
1
- require_relative('DislokuError')
2
1
  require_relative('Log')
3
- require_relative('config/YamlConfig')
4
- require_relative('config/Options')
5
- require_relative('config/MappingStore')
6
- require_relative('config/ConnectionStore')
7
- require_relative('config/Target')
8
2
  require_relative('git/Repository')
9
3
 
10
4
  module Disloku
@@ -14,32 +8,6 @@ module Disloku
14
8
 
15
9
  def initialize(cliOptions)
16
10
  processGlobalOptions(cliOptions)
17
-
18
- @repository = @scmImplementation.new(cliOptions[:dir])
19
- @config = loadConfiguration()
20
- @options = Config::Options.new(@config["options"], cliOptions)
21
- @mappingStore = Config::MappingStore.new(@config["mappings"])
22
- @connectionStore = Config::ConnectionStore.new(@config["connections"])
23
-
24
- Log.instance.addLogTarget(:logfile, File.join(repository.root, "disloku.log"), Logger::INFO)
25
- end
26
-
27
- def loadConfiguration()
28
- repoConfig = File.join(repository.root, 'disloku.config')
29
- if (!File.exists?(repoConfig))
30
- raise DislokuError.new("There is no disloku.config file in #{repository.root}")
31
- end
32
-
33
- config = Config::YamlConfig.new(repoConfig)
34
-
35
- userHome = File.expand_path("~")
36
- userConfig = File.join(userHome, ".disloku.config")
37
- if (File.exists?(userConfig))
38
- base = Config::YamlConfig.new(userConfig)
39
- config.merge(base)
40
- end
41
-
42
- return config
43
11
  end
44
12
 
45
13
  def processGlobalOptions(cliOptions)
@@ -55,25 +23,6 @@ module Disloku
55
23
  Log.instance.level(:default, Logger::WARN)
56
24
  end
57
25
  end
58
-
59
- def resolveTargets(targets)
60
- actualTargets = []
61
-
62
- while (targets.count > 0)
63
- current = targets.shift()
64
- targetConfig = @config["targets"][current]
65
- if (targetConfig != nil)
66
- if (targetConfig["targets"] != nil)
67
- targetConfig["targets"].value().each() { |x| targets.push(x.value()) }
68
- next
69
- end
70
-
71
- actualTargets.push(Config::Target.new(current, targetConfig, @mappingStore, @connectionStore))
72
- end
73
- end
74
-
75
- return actualTargets
76
- end
77
26
  end
78
27
 
79
28
  end
@@ -0,0 +1,71 @@
1
+ require_relative('DislokuError')
2
+ require_relative('BaseCommand')
3
+ require_relative('Log')
4
+ require_relative('CliAdapter')
5
+ require_relative('config/YamlConfig')
6
+ require_relative('config/Options')
7
+ require_relative('config/MappingStore')
8
+ require_relative('config/ConnectionStore')
9
+ require_relative('config/Target')
10
+
11
+ module Disloku
12
+
13
+ class BaseCoreCommand < BaseCommand
14
+ attr_accessor :repository, :config, :options
15
+
16
+ def initialize(cliOptions)
17
+ super(cliOptions)
18
+
19
+ @repository = @scmImplementation.new(cliOptions[:dir])
20
+ @config = loadConfiguration()
21
+ @options = Config::Options.new(@config["options"], cliOptions)
22
+ @mappingStore = Config::MappingStore.new(@config["mappings"])
23
+ @connectionStore = Config::ConnectionStore.new(@config["connections"])
24
+
25
+ Log.instance.addLogTarget(:logfile, File.join(repository.root, "disloku.log"), Logger::INFO)
26
+ CliAdapter.setYesNoBehavior(@options.inputDefault)
27
+ end
28
+
29
+ def loadConfiguration()
30
+ repoConfig = File.join(repository.root, 'disloku.config')
31
+ if (!File.exists?(repoConfig))
32
+ raise DislokuError.new("There is no disloku.config file in #{repository.root}")
33
+ end
34
+
35
+ config = Config::YamlConfig.new(repoConfig)
36
+
37
+ userHome = File.expand_path("~")
38
+ userConfig = File.join(userHome, ".disloku.config")
39
+ if (File.exists?(userConfig))
40
+ base = Config::YamlConfig.new(userConfig)
41
+ config.merge(base)
42
+ end
43
+
44
+ return config
45
+ end
46
+
47
+ def resolveTargets(targets)
48
+ actualTargets = []
49
+
50
+ while (targets.count > 0)
51
+ current = targets.shift()
52
+ targetConfig = @config["targets"][current]
53
+ if (targetConfig != nil)
54
+ if (targetConfig["targets"] != nil)
55
+ targetConfig["targets"].value().each() { |x| targets.push(x.value()) }
56
+ next
57
+ end
58
+
59
+ actualTargets.push(Config::Target.new(current, targetConfig, @mappingStore, @connectionStore))
60
+ end
61
+ end
62
+
63
+ return actualTargets
64
+ end
65
+
66
+ def execute(*args)
67
+ send(:executeCommand, *args)
68
+ end
69
+ end
70
+
71
+ end
@@ -20,9 +20,10 @@ module Disloku
20
20
 
21
21
  def execute()
22
22
  Log.instance.info("running task '#{self.class}'")
23
- beforeExecute()
24
- executeTask()
25
- afterExecute()
23
+ if (beforeExecute() != false)
24
+ executeTask()
25
+ afterExecute()
26
+ end
26
27
  return @result
27
28
  end
28
29
 
@@ -1,23 +1,38 @@
1
1
  require('io/console')
2
+ require('rainbow')
2
3
 
3
4
  module Disloku
4
5
 
5
6
  class CliAdapter
7
+
6
8
  class << self
7
9
 
8
10
  @@in = $stdin
9
11
  @@out = $stdout
12
+ @@rainbow = Rainbow.new()
13
+ @@rainbow.enabled = true
14
+ @@default = :none
10
15
 
11
- def queryYesNo(question)
12
- @@out.puts()
13
- @@out.puts("#{question} (Y/N)?")
16
+ def setYesNoBehavior(default)
17
+ @@default = default
18
+ end
14
19
 
15
- char = @@in.getch()
16
- return !char.match(/^[Yy]/).nil?
20
+ def queryYesNo(question, highPrio = false)
21
+ color = highPrio ? :yellow : :green
22
+ @@out.puts()
23
+ @@out.puts(@@rainbow.wrap("#{question} (Y/N)?").color(color))
24
+
25
+ if ((@@default == :veryYes) || (@@default == :yes && !highPrio))
26
+ self.puts("Assuming 'yes'")
27
+ return true
28
+ else
29
+ char = @@in.getch()
30
+ return !char.match(/^[Yy]/).nil?
31
+ end
17
32
  end
18
33
 
19
- def queryYesNo!(question)
20
- if (queryYesNo(question))
34
+ def queryYesNo!(question, highPrio = false)
35
+ if (queryYesNo(question, highPrio))
21
36
  yield
22
37
  end
23
38
  end
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Disloku
3
- VERSION = "0.4.0"
3
+ VERSION = "0.5.0"
4
4
  end
@@ -1,5 +1,15 @@
1
1
 
2
2
  module Disloku
3
3
  class DislokuError < StandardError
4
+
5
+ def initialize(msg = nil, recoverable = false)
6
+ super(msg)
7
+ @recoverable = recoverable
8
+ end
9
+
10
+ def recoverable?()
11
+ return @recoverable
12
+ end
13
+
4
14
  end
5
15
  end
data/lib/disloku/Log.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require_relative('util/Kernel')
2
2
  require('singleton')
3
3
  require('logger')
4
+ require('rainbow')
4
5
 
5
6
  module Disloku
6
7
  class Log
@@ -10,8 +11,26 @@ module Disloku
10
11
  def initialize()
11
12
  @loggers = {}
12
13
 
14
+ rainbow = Rainbow.new()
15
+ rainbow.enabled = true
16
+ colors = {
17
+ "DEBUG" => [:green, :normal],
18
+ "INFO" => [:cyan, :normal],
19
+ "WARN" => [:yellow, :bright],
20
+ "ERROR" => [:red, :normal],
21
+ "FATAL" => [:red, :bright],
22
+ }
23
+
13
24
  addLogTarget(:default, STDOUT, Logger::INFO) do |severity, datetime, progname, msg|
14
- "#{msg}\n"
25
+ line = rainbow.wrap("#{msg}")
26
+ if (colors.has_key?(severity))
27
+ c = colors[severity]
28
+ line = line.color(c[0])
29
+ if (c[1] == :bright)
30
+ line = line.bright()
31
+ end
32
+ end
33
+ line + "\n"
15
34
  end
16
35
 
17
36
  @scope = [[:default]]
@@ -0,0 +1,28 @@
1
+ require_relative('SysCmd')
2
+ require('rbconfig')
3
+
4
+ module Disloku
5
+
6
+ class OsCommands
7
+ class << self
8
+
9
+ @@os = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/ ? :win : :unix)
10
+
11
+ @@commands = {
12
+ :openDir => {
13
+ :win => "explorer \"$1\"",
14
+ :unix => "xdg-open \"$1\"",
15
+ }
16
+ }
17
+
18
+ def get(cmdKey, *args)
19
+ return SysCmd.new(@@commands[cmdKey][@@os], *args)
20
+ end
21
+
22
+ def convertPath(path)
23
+ return @@os == :win ? path.gsub(File::SEPARATOR, File::ALT_SEPARATOR) : path
24
+ end
25
+ end
26
+ end
27
+
28
+ end
@@ -3,8 +3,11 @@ require_relative('SysCmdResult');
3
3
 
4
4
  module Disloku
5
5
  class SysCmd
6
- def initialize(cmd)
6
+ def initialize(cmd, *args)
7
7
  @cmd = cmd
8
+ if (!args.empty?)
9
+ @cmd = @cmd.gsub(/\$(\d+)/) { |m| args[m[1].to_i() - 1] }
10
+ end
8
11
  end
9
12
 
10
13
  def execute()
@@ -1,16 +1,17 @@
1
- require_relative('../BaseCommand')
1
+ require_relative('../BaseCoreCommand')
2
2
  require_relative('../tasks/FolderTask')
3
+ require_relative('../OsCommands')
3
4
 
4
5
  module Disloku
5
6
  module Commands
6
7
 
7
- class Build < BaseCommand
8
+ class Build < BaseCoreCommand
8
9
  def initialize(cliOptions)
9
10
  super(cliOptions)
10
11
  end
11
12
 
12
- def execute(from, to)
13
- changesets = @repository.getChangeSets(from, to)
13
+ def executeCommand(from)
14
+ changesets = @repository.getChangeSets(from)
14
15
 
15
16
  folderInput = {
16
17
  :options => @options,
@@ -21,8 +22,12 @@ module Disloku
21
22
  resolveTargets([@options.target]).each() do |t|
22
23
  folderInput[:target] = t
23
24
 
24
- result = Tasks::FolderTask.new(folderInput).execute()
25
+ Tasks::FolderTask.new(folderInput).execute()
25
26
  end
27
+
28
+ convertedPath = OsCommands.convertPath(@options.packageDir)
29
+ Log.instance.info("Opening package directory #{convertedPath}")
30
+ @options.getCommand(:openDirCmd, convertedPath).execute()
26
31
  end
27
32
  end
28
33
 
@@ -1,14 +1,14 @@
1
- require_relative('../BaseCommand')
1
+ require_relative('../BaseCoreCommand')
2
2
 
3
3
  module Disloku
4
4
  module Commands
5
5
 
6
- class Config < BaseCommand
6
+ class Config < BaseCoreCommand
7
7
  def initialize(cliOptions)
8
8
  super(cliOptions)
9
9
  end
10
10
 
11
- def execute()
11
+ def executeCommand()
12
12
  puts(config.to_yaml())
13
13
  end
14
14
  end
@@ -1,17 +1,21 @@
1
- require_relative('../BaseCommand')
1
+ require_relative('../DislokuError')
2
+ require_relative('../BaseCoreCommand')
3
+ require_relative('../CliAdapter')
4
+ require_relative('../Log')
2
5
  require_relative('../tasks/FolderTask')
3
6
  require_relative('../tasks/NetSftpTask')
4
7
 
5
8
  module Disloku
6
9
  module Commands
7
10
 
8
- class Deploy < BaseCommand
11
+ class Deploy < BaseCoreCommand
9
12
  def initialize(cliOptions)
10
13
  super(cliOptions)
11
14
  end
12
15
 
13
- def execute(from, to)
14
- changesets = @repository.getChangeSets(from, to)
16
+ def executeCommand(from)
17
+ changesets = @repository.getChangeSets(from)
18
+ dirty = changesets.any?() { |c| c.dirty?() }
15
19
 
16
20
  folderInput = {
17
21
  :options => @options,
@@ -19,17 +23,29 @@ module Disloku
19
23
  }
20
24
 
21
25
  resolveTargets([@options.target]).each() do |t|
22
- folderInput[:target] = t
23
-
24
- result = Tasks::FolderTask.new(folderInput).execute()
25
-
26
- sftpInput = result.merge({
27
- :repository => @repository,
28
- :options => @options,
29
- :target => t,
30
- })
31
-
32
- result = Tasks::NetSftpTask.new(sftpInput).execute()
26
+ begin
27
+ folderInput[:target] = t
28
+
29
+ result = Tasks::FolderTask.new(folderInput).execute()
30
+
31
+ sftpInput = result.merge({
32
+ :repository => @repository,
33
+ :options => @options,
34
+ :target => t,
35
+ :dirty => dirty,
36
+ })
37
+
38
+ result = Tasks::NetSftpTask.new(sftpInput).execute()
39
+ rescue DislokuError => e
40
+ if (e.recoverable?)
41
+ Log.instance.error(e.message)
42
+ if (!CliAdapter.queryYesNo("Continue with next target?", true))
43
+ return
44
+ end
45
+ else
46
+ raise
47
+ end
48
+ end
33
49
  end
34
50
  end
35
51
  end
@@ -0,0 +1,26 @@
1
+ require_relative('../DislokuError')
2
+ require('fileutils')
3
+
4
+ module Disloku
5
+ module Commands
6
+
7
+ class Generate < BaseCommand
8
+ def initialize(cliOptions)
9
+ super(cliOptions)
10
+
11
+ @repository = @scmImplementation.new(cliOptions[:dir])
12
+ end
13
+
14
+ def execute()
15
+ repoConfig = File.join(@repository.root, 'disloku.config')
16
+ if (File.exists?(repoConfig))
17
+ raise DislokuError.new("disloku.config already exists in this repository")
18
+ else
19
+ sampleConfig = File.expand_path(File.join(File.dirname(__FILE__), "../../../config/sample.config"))
20
+ FileUtils.cp(sampleConfig, repoConfig)
21
+ end
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -9,6 +9,11 @@ module Disloku
9
9
  def initialize(config, mappingStore = nil, allowDefault = true)
10
10
  @mapping = {}
11
11
 
12
+ symbolize = Proc.new() do |s|
13
+ match = s.match(/^:(.*)/)
14
+ match.nil? ? s : match[1].to_sym()
15
+ end
16
+
12
17
  mappingConfig = config["mapping"]
13
18
  if (!mappingConfig.nil?)
14
19
  mappingConfig.value().each() do |m|
@@ -18,25 +23,21 @@ module Disloku
18
23
  if (src.kind_of?(Symbol))
19
24
  segments = [src]
20
25
  else
21
- segments = Util::File.getSegments(src)
26
+ segments = Util::File.getSegments(src).map(&symbolize)
27
+ end
22
28
 
23
- segments[0..-2].each() do |segment|
24
- if (!node.has_key?(segment))
25
- node[segment] = {}
26
- end
27
- node = node[segment]
29
+ segments[0..-2].each() do |segment|
30
+ if (!node.has_key?(segment))
31
+ node[segment] = {}
28
32
  end
33
+ node = node[segment]
29
34
  end
30
35
 
31
- if (!m["block"].nil? && m["block"].value())
32
- node[segments[-1]] = :block
36
+ dst = m["dst"].value()
37
+ if (dst.kind_of?(Symbol))
38
+ node[segments[-1]] = dst
33
39
  else
34
- dst = m["dst"].value()
35
- if (dst.kind_of?(Symbol))
36
- node[segments[-1]] = dst
37
- else
38
- node[segments[-1]] = Util::File.getSegments(m["dst"].value())
39
- end
40
+ node[segments[-1]] = Util::File.getSegments(dst)
40
41
  end
41
42
  end
42
43
  elsif (allowDefault)
@@ -1,4 +1,6 @@
1
1
  require_relative('../Log')
2
+ require_relative('../OsCommands')
3
+ require_relative('../SysCmd')
2
4
  require('tmpdir')
3
5
  require('fileutils')
4
6
 
@@ -14,6 +16,11 @@ module Disloku
14
16
  :allowOverride => false,
15
17
  :target => "default",
16
18
  :packageDir => :temp,
19
+ :inputDefault => :none,
20
+ :assumeYes => false,
21
+ :assumeVeryYes => false,
22
+ :openPackageDir => true,
23
+ :openDirCmd => :openDir,
17
24
  }
18
25
 
19
26
  @options.each_key() do |key|
@@ -24,6 +31,11 @@ module Disloku
24
31
  end
25
32
  end
26
33
 
34
+ processPackageDir()
35
+ processInputDefaults()
36
+ end
37
+
38
+ def processPackageDir()
27
39
  if (@options[:packageDir] == :temp)
28
40
  @options[:packageDir] = Dir.mktmpdir("disloku")
29
41
  Log.instance.debug("Creating tmp directory #{@options[:packageDir]}")
@@ -38,6 +50,14 @@ module Disloku
38
50
  end
39
51
  end
40
52
 
53
+ def processInputDefaults()
54
+ if (@options[:assumeVeryYes] == true)
55
+ @options[:inputDefault] = :veryYes
56
+ elsif (@options[:assumeYes] == true)
57
+ @options[:inputDefault] = :yes
58
+ end
59
+ end
60
+
41
61
  def method_missing(name, *args, &block)
42
62
  if (!@options.has_key?(name))
43
63
  raise ArgumentError.new("There's no option '#{name}' here")
@@ -45,6 +65,12 @@ module Disloku
45
65
 
46
66
  return @options[name]
47
67
  end
68
+
69
+ def getCommand(cmdKey, *args)
70
+ cmd = @options[cmdKey]
71
+ return cmd.kind_of?(Symbol) ? OsCommands.get(cmd, *args) : SysCmd.new(cmd, *args)
72
+ end
73
+
48
74
  end
49
75
 
50
76
  end
@@ -37,7 +37,9 @@ module Disloku
37
37
  if (to == nil)
38
38
  diff = SysCmd.new("git diff --name-status --staged #{from} #{repository.root}").execute()
39
39
  else
40
- diff = SysCmd.new("git diff --name-status #{from} #{to} #{repository.root}").execute()
40
+ # defining a 'to' means that this particular ref has to be checked out first
41
+ raise NotImplementedError.new()
42
+ #diff = SysCmd.new("git diff --name-status #{from} #{to} #{repository.root}").execute()
41
43
  end
42
44
 
43
45
  Log.instance.scope([:default, :logfile]) do
@@ -34,29 +34,36 @@ module Disloku
34
34
  @directory = getInputParam(input, :directory, String)
35
35
  @files = getInputParam(input, :files, Array)
36
36
  @target = getInputParam(input, :target, Config::Target)
37
+ @dirty = getInputParam(input, :dirty, Object)
37
38
  end
38
39
 
39
40
  def beforeExecute()
41
+ if (@files.count == 0)
42
+ CliAdapter.puts("Nothing to deploy for target [#{@target.name}]")
43
+ return false
44
+ end
45
+
40
46
  if (!@target.branchLock.nil?)
41
47
  branch = @repository.getBranchName()
42
48
  if (branch != @target.branchLock)
43
- raise DislokuError.new("Target [#{@target.name}] is locked to branch #{@target.branchLock} but current branch is #{branch}")
49
+ raise DislokuError.new("Target [#{@target.name}] is locked to branch #{@target.branchLock} but current branch is #{branch}", true)
44
50
  end
45
51
  end
46
52
 
47
- puts()
48
- puts("Target [#{@target.name}]: #{@target.user}@#{@target.host}:#{@target.targetDir}")
53
+ if (@dirty && !@target.allowDirty.nil? && !@target.allowDirty)
54
+ raise DislokuError.new("Target does not allow deployments from dirty repositories", true)
55
+ end
56
+
57
+ CliAdapter.puts()
58
+ CliAdapter.puts("Target [#{@target.name}]: #{@target.user}@#{@target.host}:#{@target.targetDir}")
49
59
  @files.each() do |file|
50
60
  puts(file)
51
61
  end
52
62
 
53
- @skip = !CliAdapter.queryYesNo("Continue with deployment?")
63
+ return CliAdapter.queryYesNo("Continue with deployment?")
54
64
  end
55
65
 
56
66
  def executeTask()
57
- if (@skip)
58
- return
59
- end
60
67
  CliAdapter.puts("Doploying target [#{@target.name}]")
61
68
 
62
69
  Log.instance.scope([:default, :logfile]) do
data/lib/disloku.rb CHANGED
@@ -1,39 +1,62 @@
1
+ require_relative('disloku/Log')
1
2
  require_relative('disloku/Constants')
2
3
  require_relative('disloku/commands/Config')
3
4
  require_relative('disloku/commands/Build')
4
5
  require_relative('disloku/commands/Deploy')
6
+ require_relative('disloku/commands/Generate')
5
7
  require_relative('disloku/SysCmd')
6
8
  require_relative('disloku/SessionManager')
7
9
  require('thor')
8
10
 
9
11
  class DislokuCli < Thor
12
+
13
+ def self.run()
14
+ begin
15
+ DislokuCli.start()
16
+ rescue Interrupt => e
17
+ Disloku::Log.instance.warn("Disloku was killed with CTRL+C")
18
+ rescue Exception => e
19
+ Disloku::Log.instance.fatal("Unhandled exception: #{e.message}")
20
+ if (ARGV.any?() { |a| a == "-d" || a == "--debug" })
21
+ Disloku::Log.instance.fatal(e.backtrace.join("\n"))
22
+ end
23
+ end
24
+ end
25
+
10
26
  class_option :verbose, :aliases => "-v", :type => :boolean, :desc => "verbose output"
11
27
  class_option :debug, :aliases => "-d", :type => :boolean, :desc => "debug output"
12
28
  class_option :scm, :aliases => "-s", :type => :string, :desc => "source control adapter to use (git) - defaults to git"
29
+ class_option :dir, :default => ".", :aliases => "-d", :desc => "repository directory - defaults to current directory"
30
+ class_option :assumeYes, :aliases => "-y", :type => :boolean, :desc => "assume 'yes' to all basic questions"
31
+ class_option :assumeVeryYes, :aliases => "-Y", :type => :boolean, :desc => "assume 'yes' to _all_ questions"
13
32
 
14
- desc "deploy [FROM] [TO]", "deploy changes"
15
- method_option :dir, :default => ".", :aliases => "-d", :desc => "repository directory"
33
+ desc "deploy [FROM]", "deploy changes"
16
34
  method_option :target, :aliases => "-t", :desc => "target"
17
35
  method_option :packageDir, :aliases => "-p", :desc => "directory in which the deployment package will be created (a temp folder is created if this option is omitted)"
18
36
  method_option :ignoreDeleteErrors, :aliases => "--ignore-delete-errors", :type => :boolean, :desc => "ignore remote delete errors"
19
- def deploy(from = nil, to = nil)
37
+ def deploy(from = nil)
20
38
  cmd = Disloku::Commands::Deploy.new(options)
21
- cmd.execute(from, to)
39
+ cmd.execute(from)
22
40
  end
23
41
 
24
- desc "build [FROM] [TO]", "build change package"
25
- method_option :dir, :default => ".", :aliases => "-d", :desc => "repository directory"
42
+ desc "build [FROM]", "build change package"
26
43
  method_option :target, :aliases => "-t", :desc => "target"
27
44
  method_option :packageDir, :default => "~/disloku", :aliases => "-p", :desc => "directory in which the deployment package will be created (~/disloku if this option is omitted)"
28
- method_option :allowOverride, :aliases => "-f", :type => :boolean, :desc => "overwrites existing deployment packages in packageDir"
45
+ method_option :allowOverride, :aliases => "-o", :type => :boolean, :desc => "overwrites existing deployment packages in packageDir"
29
46
  method_option :createDeletesFile, :aliases => "--create-deletes-file", :type => :boolean, :desc => "creates a .deletes file containing a list of deleted files"
30
- def build(from = nil, to = nil)
47
+ method_option :openPackageDir, :type => :boolean, :desc => "open package directory after successfull creation"
48
+ def build(from = nil)
31
49
  cmd = Disloku::Commands::Build.new(options)
32
- cmd.execute(from, to)
50
+ cmd.execute(from)
51
+ end
52
+
53
+ desc "generate", "creates a new sample disloku.config file in the target directory"
54
+ def generate()
55
+ cmd = Disloku::Commands::Generate.new(options)
56
+ cmd.execute()
33
57
  end
34
58
 
35
59
  desc "config", "show configuration"
36
- method_option :dir, :default => ".", :aliases => "-d", :desc => "repository directory"
37
60
  def config()
38
61
  cmd = Disloku::Commands::Config.new(options)
39
62
  cmd.execute()
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: disloku
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Angerer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-06 00:00:00.000000000 Z
11
+ date: 2014-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.1.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: rainbow
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +81,7 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: 2.14.1
69
83
  description: A deployment tool that allows copying of Git changesets via sftp (version
70
- 0.4.0 [e5344aa1bb])
84
+ 0.5.0 [1195da82ef])
71
85
  email:
72
86
  - executor.dev@gmail.com
73
87
  executables:
@@ -76,6 +90,7 @@ extensions: []
76
90
  extra_rdoc_files: []
77
91
  files:
78
92
  - lib/disloku/BaseCommand.rb
93
+ - lib/disloku/BaseCoreCommand.rb
79
94
  - lib/disloku/BaseTask.rb
80
95
  - lib/disloku/ChangeSet.rb
81
96
  - lib/disloku/ChangeSetProvider.rb
@@ -83,6 +98,7 @@ files:
83
98
  - lib/disloku/commands/Build.rb
84
99
  - lib/disloku/commands/Config.rb
85
100
  - lib/disloku/commands/Deploy.rb
101
+ - lib/disloku/commands/Generate.rb
86
102
  - lib/disloku/config/Connection.rb
87
103
  - lib/disloku/config/ConnectionStore.rb
88
104
  - lib/disloku/config/Mapping.rb
@@ -97,6 +113,7 @@ files:
97
113
  - lib/disloku/git/ChangeSetProvider.rb
98
114
  - lib/disloku/git/Repository.rb
99
115
  - lib/disloku/Log.rb
116
+ - lib/disloku/OsCommands.rb
100
117
  - lib/disloku/Repository.rb
101
118
  - lib/disloku/SessionManager.rb
102
119
  - lib/disloku/svn/ChangeSetProvider.rb
@@ -110,6 +127,7 @@ files:
110
127
  - lib/disloku/util/Kernel.rb
111
128
  - lib/disloku.rb
112
129
  - LICENSE
130
+ - config/sample.config
113
131
  - bin/disloku
114
132
  homepage: https://rubygems.org/gems/disloku
115
133
  licenses: