squared 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +49 -2
- data/lib/squared/common/format.rb +1 -1
- data/lib/squared/common/shell.rb +4 -3
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/project/base.rb +14 -14
- data/lib/squared/workspace/project/git.rb +14 -13
- data/lib/squared/workspace/project/node.rb +6 -3
- data/lib/squared/workspace/project/python.rb +1 -1
- data/lib/squared/workspace/project/ruby.rb +1 -1
- data/squared.gemspec +1 -0
- metadata +17 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f312781b98b855b5dc0ae4a57dc39ecceda128c36a899cb80d4bcb02fddba16d
         | 
| 4 | 
            +
              data.tar.gz: '0152856705e845789742fe9c99b6d60aa732641271af511493b7c889049176ae'
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 704fcf52f4f8c74b074e38ad206d25d8d7b57cc9ea3d7d725e92115a4ab969b0a982b5c4ad4e3ce1ddc0d58ceeed2a32f0d7ceeab0d2b47966c40e22a6d9fe65
         | 
| 7 | 
            +
              data.tar.gz: 241500ace7319da50eab69c5fd55068f9ee2e05ac81961832b7593d1a5e787ca942ea7901dc745259d00e814e2c58a45c3d4577a17918ce3ede2637a4fc7720e
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,40 @@ | |
| 1 1 | 
             
            # Changelog
         | 
| 2 2 |  | 
| 3 | 
            +
            ## [0.3.2] - 2024-02-25
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ### Fixed
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            - Task program command options used unrecognized symbol.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ## [0.2.5] - 2024-02-25
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            ### Fixed
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            - See `0.1.5`.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            ## [0.1.5] - 2024-02-25
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            ### Fixed
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            - Node copy method ignored include argument when called directly.
         | 
| 20 | 
            +
            - Logger is not initialized when using only Git base class.
         | 
| 21 | 
            +
            - Hide warnings about readline during execution.
         | 
| 22 | 
            +
            - Logger is not initialized when using only base class.
         | 
| 23 | 
            +
            - Merging ENV build options were double escaped.
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            ## [0.3.1] - 2025-02-12
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            ### Fixed
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            - Build ENV options error message used undeclared variable.
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            ## [0.2.4] - 2025-02-12
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            ### Fixed
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            - Git status did not show ignored or untracked files.
         | 
| 36 | 
            +
            - Caller locations were not compatible with Ruby 2.4.
         | 
| 37 | 
            +
             | 
| 3 38 | 
             
            ## [0.3.0] - 2025-02-07
         | 
| 4 39 |  | 
| 5 40 | 
             
            ### Added
         | 
| @@ -60,8 +95,14 @@ | |
| 60 95 |  | 
| 61 96 | 
             
            ### Fixed
         | 
| 62 97 |  | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 98 | 
            +
            - Project hash options duplicated dash prefix.
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            ## [0.1.4] - 2024-02-05
         | 
| 101 | 
            +
             | 
| 102 | 
            +
            ### Fixed
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            - Build options with array args were not recognized.
         | 
| 105 | 
            +
            - Pip upgrade did not append package names.
         | 
| 65 106 |  | 
| 66 107 | 
             
            ## [0.2.2] - 2025-01-19
         | 
| 67 108 |  | 
| @@ -232,11 +273,17 @@ | |
| 232 273 |  | 
| 233 274 | 
             
            - Changelog was created.
         | 
| 234 275 |  | 
| 276 | 
            +
            [0.3.2]: https://github.com/anpham6/squared/releases/tag/v0.3.2-ruby
         | 
| 277 | 
            +
            [0.3.1]: https://github.com/anpham6/squared/releases/tag/v0.3.1-ruby
         | 
| 235 278 | 
             
            [0.3.0]: https://github.com/anpham6/squared/releases/tag/v0.3.0-ruby
         | 
| 279 | 
            +
            [0.2.5]: https://github.com/anpham6/squared/releases/tag/v0.2.5-ruby
         | 
| 280 | 
            +
            [0.2.4]: https://github.com/anpham6/squared/releases/tag/v0.2.4-ruby
         | 
| 236 281 | 
             
            [0.2.3]: https://github.com/anpham6/squared/releases/tag/v0.2.3-ruby
         | 
| 237 282 | 
             
            [0.2.2]: https://github.com/anpham6/squared/releases/tag/v0.2.2-ruby
         | 
| 238 283 | 
             
            [0.2.1]: https://github.com/anpham6/squared/releases/tag/v0.2.1-ruby
         | 
| 239 284 | 
             
            [0.2.0]: https://github.com/anpham6/squared/releases/tag/v0.2.0-ruby
         | 
| 285 | 
            +
            [0.1.5]: https://github.com/anpham6/squared/releases/tag/v0.1.5-ruby
         | 
| 286 | 
            +
            [0.1.4]: https://github.com/anpham6/squared/releases/tag/v0.1.4-ruby
         | 
| 240 287 | 
             
            [0.1.3]: https://github.com/anpham6/squared/releases/tag/v0.1.3-ruby
         | 
| 241 288 | 
             
            [0.1.2]: https://github.com/anpham6/squared/releases/tag/v0.1.2-ruby
         | 
| 242 289 | 
             
            [0.1.1]: https://github.com/anpham6/squared/releases/tag/v0.1.1-ruby
         | 
| @@ -279,7 +279,7 @@ module Squared | |
| 279 279 | 
             
                  end
         | 
| 280 280 |  | 
| 281 281 | 
             
                  def raise_error(*args, hint: nil, kind: ArgumentError)
         | 
| 282 | 
            -
                    raise kind, message(*args, hint: hint, empty: true), caller_locations(1)
         | 
| 282 | 
            +
                    raise kind, message(*args, hint: hint, empty: true), caller_locations(1).map(&:to_s)
         | 
| 283 283 | 
             
                  end
         | 
| 284 284 | 
             
                end
         | 
| 285 285 | 
             
              end
         | 
    
        data/lib/squared/common/shell.rb
    CHANGED
    
    | @@ -10,7 +10,7 @@ module Squared | |
| 10 10 |  | 
| 11 11 | 
             
                  def shell_escape(val, quote: false, force: false)
         | 
| 12 12 | 
             
                    if (data = /\A(--?[^= ]+)((=|\s+)(["'])?(.+?)(["'])?)?\z/m.match(val = val.to_s))
         | 
| 13 | 
            -
                      return val  | 
| 13 | 
            +
                      return val if !data[2] || (!data[4] && data[5] =~ /\s/)
         | 
| 14 14 |  | 
| 15 15 | 
             
                      join = ->(opt) { data[1] + data[3] + shell_quote(opt) }
         | 
| 16 16 | 
             
                      if data[4] == data[6]
         | 
| @@ -32,8 +32,9 @@ module Squared | |
| 32 32 | 
             
                    Rake::Win32.windows? || ARG[:QUOTE] == '"' ? "\"#{double_quote(val)}\"" : "'#{single_quote(val)}'"
         | 
| 33 33 | 
             
                  end
         | 
| 34 34 |  | 
| 35 | 
            -
                  def shell_split(val, quote: false, join: nil)
         | 
| 36 | 
            -
                    val = Shellwords.split(val) | 
| 35 | 
            +
                  def shell_split(val, escape: true, quote: false, join: nil)
         | 
| 36 | 
            +
                    val = Shellwords.split(val)
         | 
| 37 | 
            +
                    val = val.map { |opt| shell_escape(opt, quote: quote) } if escape
         | 
| 37 38 | 
             
                    return val unless join
         | 
| 38 39 |  | 
| 39 40 | 
             
                    val.join(join.is_a?(::String) ? join : ' ')
         | 
    
        data/lib/squared/version.rb
    CHANGED
    
    
| @@ -208,16 +208,16 @@ module Squared | |
| 208 208 | 
             
                      if @output[2] != false && (val = env('BUILD', suffix: 'ENV'))
         | 
| 209 209 | 
             
                        begin
         | 
| 210 210 | 
             
                          data = JSON.parse(val)
         | 
| 211 | 
            -
                          raise_error('invalid JSON object', val, hint: "#{ | 
| 211 | 
            +
                          raise_error('invalid JSON object', val, hint: "BUILD_#{@envname}_ENV") unless data.is_a?(Hash)
         | 
| 212 212 | 
             
                        rescue StandardError => e
         | 
| 213 | 
            -
                          log | 
| 213 | 
            +
                          log&.warn e
         | 
| 214 214 | 
             
                        else
         | 
| 215 215 | 
             
                          @output[2] = data
         | 
| 216 216 | 
             
                        end
         | 
| 217 217 | 
             
                      end
         | 
| 218 218 | 
             
                      if cmd != false && !cmd.is_a?(Array)
         | 
| 219 | 
            -
                        @output[cmd ? 1 : 3] = shell_split(val, join: true) if (val = env('BUILD', suffix: 'OPTS'))
         | 
| 220 | 
            -
                        @output[4] = shell_split(val, join: true) if cmd | 
| 219 | 
            +
                        @output[cmd ? 1 : 3] = shell_split(val, escape: false, join: true) if (val = env('BUILD', suffix: 'OPTS'))
         | 
| 220 | 
            +
                        @output[4] = shell_split(val, escape: false, join: true) if !cmd && (val = env('SCRIPT', suffix: 'OPTS'))
         | 
| 221 221 | 
             
                      end
         | 
| 222 222 | 
             
                      @version = val if (val = env('BUILD', suffix: 'VERSION'))
         | 
| 223 223 | 
             
                      return unless (val = env('BUILD', strict: true))
         | 
| @@ -298,7 +298,7 @@ module Squared | |
| 298 298 | 
             
                        if val.directory? && !val.empty?
         | 
| 299 299 | 
             
                          true
         | 
| 300 300 | 
             
                        else
         | 
| 301 | 
            -
                          log | 
| 301 | 
            +
                          log&.warn "workspace \"#{val}\" (#{val.empty? ? 'empty' : 'not found'})"
         | 
| 302 302 | 
             
                          false
         | 
| 303 303 | 
             
                        end
         | 
| 304 304 | 
             
                      end
         | 
| @@ -435,7 +435,7 @@ module Squared | |
| 435 435 | 
             
                        begin
         | 
| 436 436 | 
             
                          @clean.each { |cmd, opts| build(cmd.to_s, opts, sync: sync) }
         | 
| 437 437 | 
             
                        rescue StandardError => e
         | 
| 438 | 
            -
                          log | 
| 438 | 
            +
                          log&.error e
         | 
| 439 439 | 
             
                          ret = on(:error, from, e)
         | 
| 440 440 | 
             
                          raise if @exception && ret != true
         | 
| 441 441 | 
             
                        end
         | 
| @@ -444,17 +444,17 @@ module Squared | |
| 444 444 | 
             
                          val = val.to_s
         | 
| 445 445 | 
             
                          path = basepath(val)
         | 
| 446 446 | 
             
                          if path.directory? && val =~ %r{[\\/]\z}
         | 
| 447 | 
            -
                            log | 
| 447 | 
            +
                            log&.warn "rm -rf #{path}"
         | 
| 448 448 | 
             
                            path.rmtree(verbose: verbose)
         | 
| 449 449 | 
             
                          else
         | 
| 450 | 
            -
                            log | 
| 450 | 
            +
                            log&.warn "rm #{path}"
         | 
| 451 451 | 
             
                            (val.include?('*') ? Dir[path] : [path]).each do |file|
         | 
| 452 452 | 
             
                              next unless File.file?(file)
         | 
| 453 453 |  | 
| 454 454 | 
             
                              begin
         | 
| 455 455 | 
             
                                File.delete(file)
         | 
| 456 456 | 
             
                              rescue StandardError => e
         | 
| 457 | 
            -
                                log | 
| 457 | 
            +
                                log&.error e
         | 
| 458 458 | 
             
                              end
         | 
| 459 459 | 
             
                            end
         | 
| 460 460 | 
             
                          end
         | 
| @@ -540,7 +540,7 @@ module Squared | |
| 540 540 | 
             
                          instance_variable_set :"@#{key}", val.first
         | 
| 541 541 | 
             
                        end
         | 
| 542 542 | 
             
                      else
         | 
| 543 | 
            -
                        log | 
| 543 | 
            +
                        log&.warn "variable_set: @#{key} (private)"
         | 
| 544 544 | 
             
                      end
         | 
| 545 545 | 
             
                    end
         | 
| 546 546 |  | 
| @@ -675,11 +675,11 @@ module Squared | |
| 675 675 | 
             
                        return
         | 
| 676 676 | 
             
                      end
         | 
| 677 677 | 
             
                      cmd = session_done(cmd)
         | 
| 678 | 
            -
                      log | 
| 678 | 
            +
                      log&.info cmd
         | 
| 679 679 | 
             
                      on :first, from
         | 
| 680 680 | 
             
                      begin
         | 
| 681 681 | 
             
                        if cmd.match?(/\A[^:]+:[^:]/) && workspace.task_defined?(cmd)
         | 
| 682 | 
            -
                          log | 
| 682 | 
            +
                          log&.warn "ENV was discarded: #{var}" if var
         | 
| 683 683 | 
             
                          task_invoke(cmd, exception: exception, warning: warning?)
         | 
| 684 684 | 
             
                        else
         | 
| 685 685 | 
             
                          print_item format_banner(cmd, banner: banner) if sync
         | 
| @@ -687,7 +687,7 @@ module Squared | |
| 687 687 | 
             
                          shell(*args, chdir: chdir, exception: exception)
         | 
| 688 688 | 
             
                        end
         | 
| 689 689 | 
             
                      rescue StandardError => e
         | 
| 690 | 
            -
                        log | 
| 690 | 
            +
                        log&.error e
         | 
| 691 691 | 
             
                        ret = on(:error, from, e)
         | 
| 692 692 | 
             
                        raise unless ret == true
         | 
| 693 693 | 
             
                      else
         | 
| @@ -1303,7 +1303,7 @@ module Squared | |
| 1303 1303 | 
             
                            Dir.chdir(pwd)
         | 
| 1304 1304 | 
             
                          end
         | 
| 1305 1305 | 
             
                        rescue StandardError => e
         | 
| 1306 | 
            -
                          log | 
| 1306 | 
            +
                          log&.error e
         | 
| 1307 1307 | 
             
                          unless dryrun
         | 
| 1308 1308 | 
             
                            ret = on(:error, from, e)
         | 
| 1309 1309 | 
             
                            raise if exception && ret != true
         | 
| @@ -84,11 +84,11 @@ module Squared | |
| 84 84 | 
             
                        show: %w[s exit-code histogram].freeze
         | 
| 85 85 | 
             
                      }.freeze,
         | 
| 86 86 | 
             
                      fetch: {
         | 
| 87 | 
            -
                        base: %w[multiple progress P|prune-tags refetch stdin u|update-head-ok recurse-submodules= | 
| 87 | 
            +
                        base: %w[multiple progress P|prune-tags refetch stdin u|update-head-ok recurse-submodules=b
         | 
| 88 88 | 
             
                                 recurse-submodules-default=b].freeze,
         | 
| 89 89 | 
             
                        pull: %w[4 6 n t a|append atomic dry-run f|force k|keep n|negotiate-only prefetch p|prune q|quiet
         | 
| 90 90 | 
             
                                 set-upstream unshallow update-shallow v|verbose deepen=i depth=i j|jobs=i negotiation-tip=q
         | 
| 91 | 
            -
                                 refmap=q o|server-option=e shallow-exclude=e shallow-since= | 
| 91 | 
            +
                                 refmap=q o|server-option=e shallow-exclude=e shallow-since=b upload-pack=e].freeze
         | 
| 92 92 | 
             
                      }.freeze,
         | 
| 93 93 | 
             
                      log: {
         | 
| 94 94 | 
             
                        base: %w[all all-match alternate-refs author-date-order basic-regexp bisect boundary cherry cherry-mark
         | 
| @@ -119,7 +119,7 @@ module Squared | |
| 119 119 | 
             
                                   no-empty-directory recurse-submodules sparse s|stage u|unmerged abbrev=i x|exclude=q
         | 
| 120 120 | 
             
                                   X|exclude-from=p exclude-per-directory=p format=q with-tree=q].freeze,
         | 
| 121 121 | 
             
                      ls_remote: %w[exit-code get-url q|quiet o|server-option=e symref sort=q upload-pack=e].freeze,
         | 
| 122 | 
            -
                      pull: %w[e n allow-unrelated-histories ff-only S|gpg-sign=e log=i rebase= | 
| 122 | 
            +
                      pull: %w[e n allow-unrelated-histories ff-only S|gpg-sign=e log=i r|rebase=b? s|strategy=b
         | 
| 123 123 | 
             
                               X|strategy-option=e].freeze,
         | 
| 124 124 | 
             
                      rebase: %w[n C=i allow-empty-message apply committer-date-is-author-date edit-todo f|force-rebase ignore-date
         | 
| 125 125 | 
             
                                 ignore-whitespace i|interactive keep-base m merge no-ff q|quiet quit r|rebase-merges=b?
         | 
| @@ -674,7 +674,8 @@ module Squared | |
| 674 674 | 
             
                    end
         | 
| 675 675 |  | 
| 676 676 | 
             
                    def status(*, sync: invoked_sync?('status'), **)
         | 
| 677 | 
            -
                      cmd = git_session 'status' | 
| 677 | 
            +
                      cmd = git_session 'status'
         | 
| 678 | 
            +
                      cmd << (option('long') ? '--long' : '--short')
         | 
| 678 679 | 
             
                      if (val = option('ignore-submodules', ignore: false))
         | 
| 679 680 | 
             
                        cmd << basic_option('ignore-submodules', case val
         | 
| 680 681 | 
             
                                                                 when '0', 'none'
         | 
| @@ -695,8 +696,8 @@ module Squared | |
| 695 696 | 
             
                      end
         | 
| 696 697 | 
             
                      ret = write_lines(out, banner: banner, sub: if verbose
         | 
| 697 698 | 
             
                                                                    [
         | 
| 698 | 
            -
                                                                      { pat: /^(.)([A-Z])(.+)$/, styles: :red, index: 2 },
         | 
| 699 | 
            -
                                                                      { pat: /^([A-Z])(.+)$/, styles: :green },
         | 
| 699 | 
            +
                                                                      { pat: /^(.)([A-Z?!])(.+)$/, styles: :red, index: 2 },
         | 
| 700 | 
            +
                                                                      { pat: /^([A-Z?!])(.+)$/, styles: :green },
         | 
| 700 701 | 
             
                                                                      { pat: /^(\?\?)(.+)$/, styles: :red },
         | 
| 701 702 | 
             
                                                                      { pat: /^(## )(.+)(\.{3})(.+)$/,
         | 
| 702 703 | 
             
                                                                        styles: [nil, :green, nil, :red], index: -1 }
         | 
| @@ -895,14 +896,14 @@ module Squared | |
| 895 896 | 
             
                      origin = nil
         | 
| 896 897 | 
             
                      branch = nil
         | 
| 897 898 | 
             
                      upstream = nil
         | 
| 898 | 
            -
                      source(git_output('fetch | 
| 899 | 
            -
                      source(git_output('branch | 
| 899 | 
            +
                      source(git_output('fetch --no-tags --quiet'), io: true, banner: false)
         | 
| 900 | 
            +
                      source(git_output('branch -vv --list'), io: true, banner: false).first.each do |val|
         | 
| 900 901 | 
             
                        next unless (data = /^\*\s(\S+)\s+(\h+)(?:\s\[(.+?)(?=\]\s)\])?\s/.match(val))
         | 
| 901 902 |  | 
| 902 903 | 
             
                        branch = data[1]
         | 
| 903 904 | 
             
                        if !data[3]
         | 
| 904 905 | 
             
                          unless (origin = option('repository', prefix: 'git', ignore: false))
         | 
| 905 | 
            -
                            out = source(git_output('log | 
| 906 | 
            +
                            out = source(git_output('log -n1 --format=%h%d'), io: true, stdout: true, banner: false).first
         | 
| 906 907 | 
             
                            if out =~ /^#{data[2]} \(HEAD -> #{Regexp.escape(branch)}, (.+?)\)$/
         | 
| 907 908 | 
             
                              split_escape($1).each do |val|
         | 
| 908 909 | 
             
                                next unless val.end_with?("/#{branch}")
         | 
| @@ -1120,7 +1121,7 @@ module Squared | |
| 1120 1121 | 
             
                        banner &&= cmd.temp { |val| val.start_with?('--work-tree') || val.start_with?('--git-dir') }
         | 
| 1121 1122 | 
             
                      end
         | 
| 1122 1123 | 
             
                      cmd = session_done(cmd)
         | 
| 1123 | 
            -
                      log | 
| 1124 | 
            +
                      log&.info cmd
         | 
| 1124 1125 | 
             
                      on :first, from
         | 
| 1125 1126 | 
             
                      banner = if banner
         | 
| 1126 1127 | 
             
                                 format_banner((banner.is_a?(String) ? banner : cmd).gsub(File.join(path, ''), ''), banner: true)
         | 
| @@ -1156,7 +1157,7 @@ module Squared | |
| 1156 1157 | 
             
                          end
         | 
| 1157 1158 | 
             
                        end
         | 
| 1158 1159 | 
             
                      rescue StandardError => e
         | 
| 1159 | 
            -
                        log | 
| 1160 | 
            +
                        log&.error e
         | 
| 1160 1161 | 
             
                        ret = on(:error, from, e)
         | 
| 1161 1162 | 
             
                        raise if exception && ret != true
         | 
| 1162 1163 |  | 
| @@ -1181,7 +1182,7 @@ module Squared | |
| 1181 1182 | 
             
                        next if grep&.none? { |pat| pat.match?(line) }
         | 
| 1182 1183 |  | 
| 1183 1184 | 
             
                        if loglevel
         | 
| 1184 | 
            -
                          log | 
| 1185 | 
            +
                          log&.add loglevel, line
         | 
| 1185 1186 | 
             
                        else
         | 
| 1186 1187 | 
             
                          sub&.each { |h| line = sub_style(line, **h) }
         | 
| 1187 1188 | 
             
                          if banner
         | 
| @@ -1220,7 +1221,7 @@ module Squared | |
| 1220 1221 | 
             
                      rsm = append_submodules(target: target)
         | 
| 1221 1222 | 
             
                      out = []
         | 
| 1222 1223 | 
             
                      refspec = []
         | 
| 1223 | 
            -
                      opts, pat = option_sanitize(opts, remote ? list + ['refspec= | 
| 1224 | 
            +
                      opts, pat = option_sanitize(opts, remote ? list + ['refspec=b'] : list, target: target, no: no)
         | 
| 1224 1225 | 
             
                      opts.each do |opt|
         | 
| 1225 1226 | 
             
                        if opt =~ pat
         | 
| 1226 1227 | 
             
                          case $1
         | 
| @@ -5,7 +5,7 @@ module Squared | |
| 5 5 | 
             
                module Project
         | 
| 6 6 | 
             
                  class Node < Git
         | 
| 7 7 | 
             
                    OPT_NPM = {
         | 
| 8 | 
            -
                      common: %w[dry-run include-workspace-root workspaces w|workspace= | 
| 8 | 
            +
                      common: %w[dry-run include-workspace-root workspaces=b? w|workspace=b].freeze,
         | 
| 9 9 | 
             
                      install: %w[prefer-dedupe package-lock-only cpu=q libc=e os=q].freeze,
         | 
| 10 10 | 
             
                      install_base: %w[ignore-scripts install-links strict-peer-deps include=b omit=b install-strategy=b].freeze,
         | 
| 11 11 | 
             
                      install_no: %w[audit bin-links fund package-lock].freeze,
         | 
| @@ -218,8 +218,8 @@ module Squared | |
| 218 218 | 
             
                      end
         | 
| 219 219 | 
             
                    end
         | 
| 220 220 |  | 
| 221 | 
            -
                    def copy(from: 'build', into: 'node_modules', workspace: false,  | 
| 222 | 
            -
                              | 
| 221 | 
            +
                    def copy(from: 'build', into: 'node_modules', workspace: false, scope: nil, also: nil, create: nil,
         | 
| 222 | 
            +
                             link: false, force: false, override: false, **kwargs)
         | 
| 223 223 | 
             
                      return if @copy == false
         | 
| 224 224 |  | 
| 225 225 | 
             
                      if @copy && !override
         | 
| @@ -235,6 +235,9 @@ module Squared | |
| 235 235 | 
             
                        scope = @copy[:scope]
         | 
| 236 236 | 
             
                        also = @copy[:also]
         | 
| 237 237 | 
             
                        create = @copy[:create]
         | 
| 238 | 
            +
                      else
         | 
| 239 | 
            +
                        glob = kwargs[:include]
         | 
| 240 | 
            +
                        exclude = kwargs[:exclude]
         | 
| 238 241 | 
             
                      end
         | 
| 239 242 | 
             
                      items = []
         | 
| 240 243 | 
             
                      items << @workspace.home if build? && path != @workspace.home && @workspace.home?
         | 
| @@ -14,7 +14,7 @@ module Squared | |
| 14 14 | 
             
                      install: %w[break-system-packages check-build-dependencies compile dry-run force-reinstall I|ignore-installed
         | 
| 15 15 | 
             
                                  ignore-requires-python no-build-isolation no-clean no-compile no-deps no-index no-warn-conflicts
         | 
| 16 16 | 
             
                                  no-warn-script-location pre prefer-binary require-hashes U|upgrade use-pep517 user abi=e
         | 
| 17 | 
            -
                                  config-settings=q c|constraint=p e|editable= | 
| 17 | 
            +
                                  config-settings=q c|constraint=p e|editable=b? extra-index-url=q f|find-links=q global-option=q
         | 
| 18 18 | 
             
                                  implementation=b i|index-url=q no-binary=q only-binary=q platform=q prefix=p progress-bar=b
         | 
| 19 19 | 
             
                                  python-version=q report=p r|requirement=p root=p root-user-action=e src=p t|target=p
         | 
| 20 20 | 
             
                                  upgrade-strategy=b].freeze
         | 
| @@ -25,7 +25,7 @@ module Squared | |
| 25 25 | 
             
                                   platform=q source=q].freeze,
         | 
| 26 26 | 
             
                      push: %w[no-http-proxy attestation=p host=q key=e otp=e p|http-proxy=q?].freeze,
         | 
| 27 27 | 
             
                      build: %w[force strict o|output=p platform=q].freeze,
         | 
| 28 | 
            -
                      exec: %w[conservative prerelease no-prerelease g|gem= | 
| 28 | 
            +
                      exec: %w[conservative prerelease no-prerelease g|gem=b version=e].freeze,
         | 
| 29 29 | 
             
                      pristine: %w[all env-shebang extensions no-env-shebang no-extensions only-executables only-missing-extensions
         | 
| 30 30 | 
             
                                   only-plugins n|bindir=p i|install-dir=p skip=e v|version=e].freeze,
         | 
| 31 31 | 
             
                      shared: %w[f b|both clear-sources conservative default development development-all E|explain
         | 
    
        data/squared.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: squared
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.3. | 
| 4 | 
            +
              version: 0.3.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - An Pham
         | 
| 8 8 | 
             
            bindir: exe
         | 
| 9 9 | 
             
            cert_chain: []
         | 
| 10 | 
            -
            date: 2025-02- | 
| 10 | 
            +
            date: 2025-02-25 00:00:00.000000000 Z
         | 
| 11 11 | 
             
            dependencies:
         | 
| 12 12 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 13 13 | 
             
              name: rake
         | 
| @@ -51,6 +51,20 @@ dependencies: | |
| 51 51 | 
             
                - - ">="
         | 
| 52 52 | 
             
                  - !ruby/object:Gem::Version
         | 
| 53 53 | 
             
                    version: '0'
         | 
| 54 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 55 | 
            +
              name: readline
         | 
| 56 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 57 | 
            +
                requirements:
         | 
| 58 | 
            +
                - - ">="
         | 
| 59 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 60 | 
            +
                    version: '0'
         | 
| 61 | 
            +
              type: :runtime
         | 
| 62 | 
            +
              prerelease: false
         | 
| 63 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 64 | 
            +
                requirements:
         | 
| 65 | 
            +
                - - ">="
         | 
| 66 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 67 | 
            +
                    version: '0'
         | 
| 54 68 | 
             
            description: Rake task generator for managing multi-language workspaces.
         | 
| 55 69 | 
             
            email:
         | 
| 56 70 | 
             
            - anpham6@gmail.com
         | 
| @@ -106,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 106 120 | 
             
                - !ruby/object:Gem::Version
         | 
| 107 121 | 
             
                  version: '0'
         | 
| 108 122 | 
             
            requirements: []
         | 
| 109 | 
            -
            rubygems_version: 3.6. | 
| 123 | 
            +
            rubygems_version: 3.6.2
         | 
| 110 124 | 
             
            specification_version: 4
         | 
| 111 125 | 
             
            summary: Rake task generator for managing multi-language workspaces.
         | 
| 112 126 | 
             
            test_files: []
         |