source_win_bat 0.2.0 → 0.3.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: 2c46cbace49e6e3914b1f3d5152349714d731635f12c26be4d55b58a590a9651
4
- data.tar.gz: 36dcbb2f601fde0b2805b6387ee22205c47d48247e320c92ba6ea059c75ba8f3
3
+ metadata.gz: 60ef7f12402da3cef3443161f97eef66b580182aa70c2ea20e2f936dc56f9cd3
4
+ data.tar.gz: 70f32f56ddb5aa0bdded6e72084bb977af84658b4dcabf3cbdc3e288cdc104e4
5
5
  SHA512:
6
- metadata.gz: 92f80de09376677f864f6817291965309d17c7f9be4a2f733193b381a0141eaade5928c99ce853153539ad97a79a5e7576c0739b5bd40ae00cb228b65db62278
7
- data.tar.gz: 7ce72e5a78583ad0124a72efdb50478d33b8f7ffa36b3a7f9824594dc72643451ef24c7fa95781a372d247a0d31e6ff735882d512af9e20c722b04a2115cfedd
6
+ metadata.gz: 87b0dda50fb66fac4b6c691bebf72d6549561e48092ce04945e083a4dca332ad5530c4bcf91ff43f7d8759d415ffef4789e3ab89f178ab142e00231c1617e698
7
+ data.tar.gz: 6aa26c86859b485d8033a01ddb5a72b73b5e07306a9b2326e762a63034e6ca11b377719de21694befaa6dd22d4e665b76a913dd87f4e7e97836f36c6ab48a4e6
data/bin/init_sw CHANGED
@@ -10,36 +10,30 @@ if [[ `uname` != Linux && $? != 0 ]]; then
10
10
  else
11
11
  sw () {
12
12
  local arg
13
+ local preserves_dump=
14
+ local shows_cmd=
15
+ local is_cmd_given=
13
16
  local tmp_env tmp_macro tmp_cwd
14
17
  local exitstatus
15
18
 
19
+ local opts=()
16
20
  for arg in "$@"; do
17
21
  if [[ "$arg" = "--" ]]; then
18
22
  shift 1
19
23
  break
20
24
  elif [[ "$arg" =~ ^-+.+ ]]; then
21
25
  case "$arg" in
22
- "--help" | "-h" )
23
- cat <<EOS
24
- sw, or SourceWinBat, is a utility to run Windows batch files from WSL /
25
- MSYS2 / Cygwin and sync environment variables, and working directories
26
- between batch files and their UNIX Bash shell.
27
-
28
- Usage:
29
- sw [ [sw_options] -- ] win_bat_file [args...]
30
-
31
- Sw options:
32
- -help --help Show this help message
33
-
34
- Examples:
35
- sw echo test
36
- sw somebat.bat
37
-
38
- EOS
39
- return ;;
26
+ "--preserve-dump" )
27
+ preserves_dump=0
28
+ opts+=( "$arg" )
29
+ ;;
30
+ "--debug" )
31
+ preserves_dump=0
32
+ opts+=( "$arg" )
33
+ ;;
40
34
  * )
41
- echo "Unknown option '$1'" >&2
42
- return 1 ;;
35
+ opts+=( "$arg" )
36
+ ;;
43
37
  esac
44
38
  shift 1
45
39
  else
@@ -50,7 +44,7 @@ EOS
50
44
  tmp_env="$(mktemp)"
51
45
  tmp_macro="$(mktemp)"
52
46
  tmp_cwd="$(mktemp)"
53
- ruby -W0 -e "require 'source_win_bat'; SourceWindowsBatch.new.main(ARGV)" "${tmp_env}" "${tmp_macro}" "${tmp_cwd}" "$@"
47
+ ruby -W0 -e "require 'source_win_bat'; SourceWindowsBatch.new.main(ARGV)" -- "${opts[@]}" -- "${tmp_env}" "${tmp_macro}" "${tmp_cwd}" "$@"
54
48
  exitstatus=$?
55
49
  if [[ -e "${tmp_env}" ]]; then
56
50
  source "${tmp_env}"
@@ -62,7 +56,11 @@ EOS
62
56
  source "${tmp_cwd}"
63
57
  fi
64
58
 
65
- ruby -e "begin; File.delete('${tmp_env}', '${tmp_macro}', '${tmp_cwd}'); rescue Errno::ENOENT; end"
59
+ if [[ -z $preserves_dump ]]; then
60
+ ruby -e "begin; File.delete('${tmp_env}', '${tmp_macro}', '${tmp_cwd}'); rescue Errno::ENOENT; end"
61
+ else
62
+ echo "SW: '${tmp_env}', '${tmp_macro}', '${tmp_cwd}' are preserved"
63
+ fi
66
64
  return $exitstatus
67
65
  }
68
66
  fi
@@ -6,18 +6,10 @@ require_relative 'unixcompatenv'
6
6
 
7
7
  class SourceWindowsBatch
8
8
 
9
- VERSION = "0.2.0"
9
+ VERSION = "0.3.0"
10
10
 
11
11
  def main(argv)
12
- if argv.length < 4 || argv[3].chomp.empty?
13
- STDERR.puts <<-EOS
14
- Usage: sw windows_cmd_or_batch [options_for_the_cmd]
15
-
16
- Internal Ruby command Usage:
17
- #{File.basename(__FILE__)} env_out macro_out cwd_out windows_cmd_or_batch [options_for_the_cmd]
18
- EOS
19
- exit
20
- end
12
+ options = parse_args!(argv)
21
13
 
22
14
  unless [:cygwin, :msys, :wsl].include? UnixCompatEnv.compat_env
23
15
  raise "You're in an unsupported UNIX compatible environment"
@@ -33,7 +25,9 @@ Internal Ruby command Usage:
33
25
  win_cmd = concat_macrodump(win_cmd, macro_tmp_file_in)
34
26
  win_cmd = concat_cwddump(win_cmd, cwd_tmp_file_in)
35
27
  win_cmd += " & call exit %^SW_EXITSTATUS%"
36
- # puts win_cmd
28
+ if options[:show_cmd]
29
+ STDERR.puts "SW: " + win_cmd
30
+ end
37
31
  Signal.trap(:INT, "SIG_IGN")
38
32
  if UnixCompatEnv.compat_env == :wsl
39
33
  # * Skip winpty, assuming the system's WSL supports ConPTY
@@ -60,8 +54,10 @@ Internal Ruby command Usage:
60
54
  conv_setenv_stmts(env_tmp_file_in, argv[0], :bash, codepage)
61
55
  conv_doskey_stmts(macro_tmp_file_in, argv[1], :bash, codepage)
62
56
  gen_chdir_cmds(cwd_tmp_file_in, argv[2], :bash, codepage)
63
- [env_tmp_file_in, macro_tmp_file_in, cwd_tmp_file_in].each do |f|
64
- File.delete f
57
+ if !options[:preserve_dump]
58
+ [env_tmp_file_in, macro_tmp_file_in, cwd_tmp_file_in].each do |f|
59
+ File.delete f
60
+ end
65
61
  end
66
62
  rescue Errno::ENOENT
67
63
  # ignore
@@ -72,6 +68,89 @@ Internal Ruby command Usage:
72
68
 
73
69
  private
74
70
 
71
+ def parse_args!(argv)
72
+ options = {}
73
+ while argv.length > 0 && argv[0].start_with?("-")
74
+ arg = argv.shift
75
+ case arg
76
+ when "--"
77
+ next
78
+ when "--show-cmd"
79
+ options[:show_cmd] = true
80
+ when "--preserve-dump"
81
+ options[:preserve_dump] = true
82
+ when "--debug"
83
+ options[:show_cmd] = true
84
+ options[:preserve_dump] = true
85
+ when "--help", "-h"
86
+ puts help
87
+ exit
88
+ when "--version", "-v"
89
+ STDERR.puts "SourceWinBat Version #{VERSION}"
90
+ exit
91
+ else
92
+ STDERR.puts "Unknown option '#{arg}'"
93
+ exit 1
94
+ end
95
+ end
96
+ if argv.length < 4 || argv[3].chomp.empty?
97
+ STDERR.puts "Error: No Windows command is given\n---"
98
+ STDERR.puts help
99
+ exit 1
100
+ end
101
+
102
+ options
103
+ end
104
+
105
+ def help
106
+ <<EOS
107
+ sw, or SourceWinBat, is a utility to run Windows batch files from WSL /
108
+ MSYS2 / Cygwin and sync environment variables, and working directories
109
+ between batch files and their UNIX Bash shell.
110
+
111
+ Usage:
112
+ sw [ [sw_options] -- ] win_bat_file [args...]
113
+
114
+ Sw options:
115
+ -h --help Show this help message
116
+ -v --version Show the version information
117
+ --preserve-dump Preserve the environment dump files of cmd.exe for
118
+ debugging
119
+ --show-cmd Show the command executed in cmd.exe for debugging
120
+ --debug Enable '--preserve-dump' and '--show-cmd' options
121
+
122
+ Examples:
123
+ sw echo test
124
+ sw somebat.bat
125
+
126
+ You can control some behavior of SourceWinBat by defining following environment
127
+ variables.
128
+
129
+ Blacklisting and Whitelisting Environment Variable Not to be Synced:
130
+
131
+ SWB_BLACKLIST Define comma-separated environment variable names with
132
+ regular expressions. All environment variables included
133
+ in this list will not be synced by SourceWinBat.
134
+
135
+ SWB_WHITELIST Define variable names in the same manner as that of
136
+ SWB_BLACKLIST. All environment variables that are NOT
137
+ included in the list will NOT be synced by SourceWinBat.
138
+
139
+ Examples:
140
+
141
+ export SWB_BLACKLIST="foo:bar:baz_.*"
142
+
143
+ "foo", "bar", and any variables name of which start with "baz_" will not
144
+ be synced
145
+
146
+ export SWB_BLACKLIST="sync_taboo"
147
+ export SWB_WHITELIST="sync_.*"
148
+
149
+ Only variables name of which start with "sync_" will be synced,
150
+ except "sync_taboo".
151
+ EOS
152
+ end
153
+
75
154
  def detect_ansi_codepage
76
155
  if !STDOUT.isatty && UnixCompatEnv.compat_env == :wsl
77
156
  # cmd.exe seems to use UTF-8 when Stdout is redirected in WSL. TODO: Is it always fixed?
@@ -254,7 +333,7 @@ Internal Ruby command Usage:
254
333
  key, body = /([^=]*)=(.*)$/.match(doskey_stmt)[1..2]
255
334
 
256
335
  is_key_valid = /^[a-zA-Z][0-9a-zA-Z]*$/ =~ key
257
- return nil unless is_key_valid
336
+ next if !is_key_valid
258
337
 
259
338
  body_substituted = escape_singlequote(body.chomp)
260
339
  .gsub(/(?<param>\$[1-9]|\$\$|\$\*)/, '\'"\k<param>"\'')
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'source_win_bat'
3
- s.version = '0.2.0'
4
- s.date = '2019-01-05'
3
+ s.version = '0.3.0'
4
+ s.date = '2019-02-06'
5
5
  s.summary = "'source' Windows bat files in your UNIX compatible shell in Windows"
6
6
  s.description = <<EOS
7
7
  sw, or SourceWinBat, is a utility to run Windows batch files from WSL /
data/test/setcwd.cmd CHANGED
@@ -1,5 +1,6 @@
1
1
  @echo off
2
2
 
3
+ C:
3
4
  cd C:\
4
5
  pushd C:\Windows
5
6
  pushd C:\Windows\system32
@@ -16,7 +16,7 @@ sw echo %jp% > /dev/null # Re-import $jp from Windows
16
16
  sw set jp2=あいうえお > /dev/null
17
17
  [[ $(echo $jp2) = "あいうえお" ]]; tap_okif $?
18
18
 
19
-
19
+ cd $(to_unix_path "C:\\")
20
20
  tmp="$(to_unix_path "$(sw echo %TEMP% | strip)")/sw_日本語ディレクトリ"
21
21
  rm -rf "$tmp"
22
22
  mkdir "$tmp"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: source_win_bat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takaya Saeki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-05 00:00:00.000000000 Z
11
+ date: 2019-02-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: "sw, or SourceWinBat, is a utility to run Windows batch files from WSL
14
14
  /\nMSYS2 / Cygwin and sync environment variables, doskeys, and working \ndirectories