Mercurial > hg
comparison mercurial/windows.py @ 38725:c382c19ce9bd
windows: expand '~/' and '~\' to %USERPROFILE% when translating to cmd.exe
It's convenient to be able to reference hooks in a portable location on any
platform.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Mon, 16 Jul 2018 00:32:33 -0400 |
parents | 02b5b5c1bba8 |
children | 47ac5d93d708 |
comparison
equal
deleted
inserted
replaced
38724:02b5b5c1bba8 | 38725:c382c19ce9bd |
---|---|
274 >>> shelltocmdexe(b"cmd $$ %% %var1%%var2%", e) | 274 >>> shelltocmdexe(b"cmd $$ %% %var1%%var2%", e) |
275 'cmd $$ %% %var1%%var2%' | 275 'cmd $$ %% %var1%%var2%' |
276 >>> # No double substitution | 276 >>> # No double substitution |
277 >>> shelltocmdexe(b"$var1 %var1%", {b'var1': b'%var2%', b'var2': b'boom'}) | 277 >>> shelltocmdexe(b"$var1 %var1%", {b'var1': b'%var2%', b'var2': b'boom'}) |
278 '%var1% %var1%' | 278 '%var1% %var1%' |
279 >>> # Tilde expansion | |
280 >>> shelltocmdexe(b"~/dir ~\dir2 ~tmpfile \~/", {}) | |
281 '%USERPROFILE%/dir %USERPROFILE%\\dir2 ~tmpfile ~/' | |
279 """ | 282 """ |
280 if not any(c in path for c in b"$'"): | 283 if not any(c in path for c in b"$'~"): |
281 return path | 284 return path |
282 | 285 |
283 varchars = pycompat.sysbytes(string.ascii_letters + string.digits) + b'_-' | 286 varchars = pycompat.sysbytes(string.ascii_letters + string.digits) + b'_-' |
284 | 287 |
285 res = b'' | 288 res = b'' |
342 else: | 345 else: |
343 res += b'$' + var | 346 res += b'$' + var |
344 | 347 |
345 if c != '': | 348 if c != '': |
346 index -= 1 | 349 index -= 1 |
347 elif c == b'\\' and index + 1 < pathlen and path[index + 1] == b'$': | 350 elif (c == b'~' and index + 1 < pathlen |
348 # Skip '\', but only if it is escaping $ | 351 and path[index + 1] in (b'\\', b'/')): |
349 res += b'$' | 352 res += "%USERPROFILE%" |
353 elif (c == b'\\' and index + 1 < pathlen | |
354 and path[index + 1] in (b'$', b'~')): | |
355 # Skip '\', but only if it is escaping $ or ~ | |
356 res += path[index + 1] | |
350 index += 1 | 357 index += 1 |
351 else: | 358 else: |
352 res += c | 359 res += c |
353 | 360 |
354 index += 1 | 361 index += 1 |