beaver-build 2.0.0 → 2.2.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
  SHA256:
3
- metadata.gz: aa3e53273d2fd49984ac532f522eefad45a60b53ed8ee79e8f8ca4db819f43b9
4
- data.tar.gz: 37b8f8c9e771c9f265096fa9adddc935f77d2592250a15ade2daf6b19a24fe17
3
+ metadata.gz: 7c14453e56d234a62a48d99e3151389a8987ad31413fb822e3c239309b3a933b
4
+ data.tar.gz: ad7487c17109c457e5d7d9fbda58a7479599f947f8c74be00623d10c6170627d
5
5
  SHA512:
6
- metadata.gz: 6190cb42ae9716e86244ee74a0959bb6fd48b0c7b2a4e45e40585583bec89259044948ce21efe7fabefec41256cdab3b502e745fdc0ddd77b484b301a3e5e522
7
- data.tar.gz: '00930de6654e5ea1db3769a59d38d6602b6d50c70cc2e6623968b35007134895f2dab9781c98fbfe880beb9b2593e077b35bfdd05963a4fde7a1ce216c18d875'
6
+ metadata.gz: fa4a243e27a05613f9e042bd2e2a17419d461b17cef85865bef00ce57f6141e9fe383891ac229c5f9481a256e5785d4f88edd60796e3769255cb6ae8b9ab21c2
7
+ data.tar.gz: 50a9fbb0f1103e13b00025dd84707c8c175b70f906e7a8e49b5806c91185822af4751096b5ac5c278dd7f01f7704d7ef5d3b31eaecd322b7bc02c89b885fde97
data/lib/beaver.rb CHANGED
@@ -60,26 +60,51 @@ class Beaver
60
60
  def call(cmd)
61
61
  _cmd = @commands[cmd.to_sym]
62
62
  if _cmd.nil?
63
- puts "No command called #{cmd} found"
63
+ STDERR.puts "No command called #{cmd} found"
64
64
  exit 1
65
65
  end
66
66
 
67
67
  _cmd.call
68
68
  end
69
69
 
70
+ # Run this command when it is called, no matter if its dependencies did not change
71
+ def must_run cmd
72
+ _cmd = @commands[cmd.to_sym]
73
+ if _cmd.nil?
74
+ STDERR.puts "\001b[31mNON-FATAL ERROR\001b[0m: Command #{cmd} does not exist, so `must_run` has not effect"
75
+ exit 1
76
+ end
77
+ _cmd.overwrite_should_run = true
78
+
79
+ _cmd.call
80
+ end
81
+
82
+ def set_main(cmd)
83
+ @mainCommand = cmd.to_sym
84
+ end
85
+
70
86
  # Put this at the end of a file
71
87
  def end
72
88
  $cache = CacheManager.new # load cache file
73
89
 
74
90
  command = ARGV[0] || @mainCommand
91
+ if command == "--" # passing arguments to be processed by the builld file -> pass "--" as the command to specify the default
92
+ command = @mainCommand
93
+ end
75
94
  self.call command
76
95
 
77
96
  $cache.save # save cache file
78
97
  end
79
98
 
99
+ # Returns all available commands as an array
100
+ def list_commands
101
+ return @commands.map { |k, v| k }
102
+ end
103
+
80
104
  # Clean cache
81
105
  def clean
82
106
  FileUtils.rm_r @cache_loc
107
+ reset_cache
83
108
  end
84
109
  end
85
110
 
@@ -95,3 +120,7 @@ require 'sh'
95
120
  def call(cmd)
96
121
  $beaver.call cmd
97
122
  end
123
+
124
+ def must_run(cmd)
125
+ $beaver.musts_run cmd
126
+ end
data/lib/command.rb CHANGED
@@ -1,8 +1,11 @@
1
1
  require 'file.rb'
2
2
 
3
+ $__BEAVER_SHOULD_RUN_SCOPE = false
4
+
3
5
  class Command
4
6
  attr_accessor :name
5
7
  attr_accessor :fn
8
+ attr_accessor :overwrite_should_run
6
9
 
7
10
  def initialize(name, file_deps, fn)
8
11
  @name = name
@@ -10,19 +13,38 @@ class Command
10
13
  # Type: FileDep, or nil
11
14
  @file_deps = file_deps
12
15
  @fn = fn
16
+ @overwrite_should_run = false
13
17
  end
14
18
 
15
19
  # Execute the command if needed (dependency files changed)
16
20
  def call
21
+ global_alread_defined = $__BEAVER_SHOULD_RUN_SCOPE
22
+ if self.overwrite_should_run
23
+ $__BEAVER_SHOULD_RUN_SCOPE = true
24
+ end
25
+ if $__BEAVER_SHOULD_RUN_SCOPE
26
+ self.overwrite_should_run = true
27
+ end
28
+
17
29
  if self.should_run?
18
30
  self.call_now()
19
31
  end
32
+
33
+ if !global_alread_defined && $__BEAVER_SHOULD_RUN_SCOPE
34
+ $__BEAVER_SHOULD_RUN_SCOPE = false
35
+ end
20
36
  end
21
37
 
22
38
  # Force call the command, even if none of the files changed
23
39
  def call_now
24
40
  $file = nil
25
41
  $files = nil
42
+
43
+ if @file_deps.nil?
44
+ @fn.call()
45
+ return
46
+ end
47
+
26
48
  if @file_deps.type == :each
27
49
  @file_deps.files.each do |file_obj|
28
50
  $file = file_obj
@@ -37,6 +59,8 @@ class Command
37
59
  # Returns wheter the command should run, meaning if any of the depency
38
60
  # files changed
39
61
  def should_run?
62
+ return true if @overwrite_should_run
63
+
40
64
  if changed? "__BEAVER__CONFIG__", $PROGRAM_NAME
41
65
  # Ruby script itself changed
42
66
  # TODO: does not account for dependencies of the script (probably uncommon though)
@@ -71,6 +95,6 @@ class Command
71
95
  end
72
96
 
73
97
  def cmd(name, deps = nil, &fn)
74
- cmd = Command.new name, deps, fn
98
+ cmd = Command.new name.to_sym, deps, fn
75
99
  $beaver.__appendCommand cmd
76
100
  end
data/lib/file.rb CHANGED
@@ -78,6 +78,9 @@ class CacheManager
78
78
 
79
79
  def save
80
80
  packed = MessagePack.pack(@files)
81
+ unless Dir.exist? $beaver.cache_loc
82
+ Dir.mkdir $beaver.cache_loc
83
+ end
81
84
  File.binwrite($beaver.file_cache_file, packed)
82
85
  end
83
86
  end
data/lib/file_dep.rb CHANGED
@@ -43,7 +43,7 @@ class FileDep
43
43
  globs = nil
44
44
  if @glob.respond_to? :each
45
45
  # array
46
- globs = glob
46
+ globs = @glob
47
47
  else
48
48
  # string
49
49
  globs = [@glob]
data/lib/sh.rb CHANGED
@@ -10,14 +10,21 @@ def sh(strcmd)
10
10
  end
11
11
  end
12
12
 
13
- if strcmd.is_a? SilentAll
13
+ if strcmd.is_a?(SilentAll) || strcmd.is_a?(SilentOutput)
14
14
  `#{strcmd}`
15
15
  else
16
- puts `#{strcmd}`
16
+ system "#{strcmd}"
17
17
  end
18
18
 
19
19
  if $beaver.has(:e)
20
- exit($?.exitstatus) if $?.exitstatus != 0
20
+ if $?.to_i != 0
21
+ if $?.exitstatus.nil?
22
+ puts $?
23
+ end
24
+ exit($?.exitstatus || -1)
25
+ end
26
+ elsif $?.to_i != 0 && $?.exitstatus.nil?
27
+ puts $?
21
28
  end
22
29
  end
23
30
 
@@ -31,6 +38,11 @@ SilentAll = Struct.new(:strcmd) do
31
38
  strcmd
32
39
  end
33
40
  end
41
+ SilentOutput = Struct.new(:strcmd) do
42
+ def to_s
43
+ strcmd
44
+ end
45
+ end
34
46
 
35
47
  # Do not print the command
36
48
  def silent(strcmd)
@@ -41,3 +53,8 @@ end
41
53
  def full_silent(strcmd)
42
54
  return SilentAll.new(strcmd)
43
55
  end
56
+
57
+ # Do not print out the output of the command
58
+ def output_silent(strcmd)
59
+ return SilentOutput.new(strcmd)
60
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beaver-build
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Everaert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-09 00:00:00.000000000 Z
11
+ date: 2023-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -26,7 +26,7 @@ dependencies:
26
26
  version: 1.6.0
27
27
  description: |-
28
28
  Beaver is an easy to understand build tool with a lot of capabilities.
29
- Documentation and examples on [github](https://github.com/jomy10/beaver) (https://github.com/jomy10/beaver).
29
+ Documentation and examples on [github](https://github.com/jomy10/beaver).
30
30
  email:
31
31
  executables:
32
32
  - beaver