@@ -468,6 +468,37 @@ def create_spinner(text, nospin=None, spinner_name=None):
468
468
yield sp
469
469
470
470
471
+ def resolve (cmd , sp ):
472
+ from .vendor import delegator
473
+ from .cmdparse import Script
474
+ from .vendor .pexpect .exceptions import EOF , TIMEOUT
475
+ from .vendor .vistir .compat import to_native_string
476
+ EOF .__module__ = "pexpect.exceptions"
477
+ from ._compat import decode_output
478
+ c = delegator .run (Script .parse (cmd ).cmdify (), block = False , env = os .environ .copy ())
479
+ _out = decode_output ("" )
480
+ result = None
481
+ out = to_native_string ("" )
482
+ while True :
483
+ try :
484
+ result = c .expect (u"\n " , timeout = environments .PIPENV_TIMEOUT )
485
+ except (EOF , TIMEOUT ):
486
+ pass
487
+ if result is None :
488
+ break
489
+ _out = c .subprocess .before
490
+ if _out is not None :
491
+ _out = decode_output ("{0}" .format (_out ))
492
+ out += _out
493
+ sp .text = to_native_string ("{0}" .format (_out [:100 ]))
494
+ if environments .is_verbose ():
495
+ if _out is not None :
496
+ sp ._hide_cursor ()
497
+ sp .write (_out .rstrip ())
498
+ sp ._show_cursor ()
499
+ return c
500
+
501
+
471
502
def venv_resolve_deps (
472
503
deps ,
473
504
which ,
@@ -476,19 +507,16 @@ def venv_resolve_deps(
476
507
clear = False ,
477
508
allow_global = False ,
478
509
pypi_mirror = None ,
510
+ vcs_deps = None ,
479
511
):
480
512
from .vendor .vistir .misc import fs_str
481
- from .vendor .vistir .compat import Path , to_native_string , JSONDecodeError
513
+ from .vendor .vistir .compat import Path , JSONDecodeError
482
514
from .vendor .vistir .path import create_tracked_tempdir
483
- from .cmdparse import Script
484
- from .vendor .pexpect .exceptions import EOF , TIMEOUT
485
- from .vendor import delegator
486
515
from . import resolver
487
- from ._compat import decode_output
488
516
import json
489
517
490
518
if not deps :
491
- return []
519
+ return [], []
492
520
493
521
req_dir = create_tracked_tempdir (prefix = "pipenv" , suffix = "requirements" )
494
522
cmd = [
@@ -509,29 +537,8 @@ def venv_resolve_deps(
509
537
os .environ ["PIPENV_VERBOSITY" ] = str (environments .PIPENV_VERBOSITY )
510
538
os .environ ["PIPENV_REQ_DIR" ] = fs_str (req_dir )
511
539
os .environ ["PIP_NO_INPUT" ] = fs_str ("1" )
512
- out = to_native_string ("" )
513
- EOF .__module__ = "pexpect.exceptions"
514
540
with create_spinner (text = fs_str ("Locking..." )) as sp :
515
- c = delegator .run (Script .parse (cmd ).cmdify (), block = False , env = os .environ .copy ())
516
- _out = decode_output ("" )
517
- result = None
518
- while True :
519
- try :
520
- result = c .expect (u"\n " , timeout = environments .PIPENV_TIMEOUT )
521
- except (EOF , TIMEOUT ):
522
- pass
523
- if result is None :
524
- break
525
- _out = c .subprocess .before
526
- if _out is not None :
527
- _out = decode_output ("{0}" .format (_out ))
528
- out += _out
529
- sp .text = to_native_string ("{0}" .format (_out [:100 ]))
530
- if environments .is_verbose ():
531
- if _out is not None :
532
- sp ._hide_cursor ()
533
- sp .write (_out .rstrip ())
534
- sp ._show_cursor ()
541
+ c = resolve (cmd , sp )
535
542
c .block ()
536
543
if c .return_code != 0 :
537
544
sp .red .fail (environments .PIPENV_SPINNER_FAIL_TEXT .format (
@@ -540,17 +547,39 @@ def venv_resolve_deps(
540
547
click_echo (c .out .strip (), err = True )
541
548
click_echo (c .err .strip (), err = True )
542
549
sys .exit (c .return_code )
550
+ results = c .out
551
+ if vcs_deps :
552
+ with temp_environ ():
553
+ os .environ ["PIPENV_PACKAGES" ] = str ("\n " .join (vcs_deps ))
554
+ vcs_c = resolve (cmd , sp )
555
+ c .block ()
556
+ if c .return_code != 0 :
557
+ sp .red .fail (environments .PIPENV_SPINNER_FAIL_TEXT .format (
558
+ "Locking Failed!"
559
+ ))
560
+ click_echo (c .out .strip (), err = True )
561
+ click_echo (c .err .strip (), err = True )
562
+ sys .exit (c .return_code )
563
+ vcs_results = vcs_c .out
564
+ vcs_err = vcs_c .err
543
565
else :
544
- sp .green .ok (environments .PIPENV_SPINNER_OK_TEXT .format ("Success!" ))
566
+ vcs_results = ""
567
+ vcs_err = ""
568
+ sp .green .ok (environments .PIPENV_SPINNER_OK_TEXT .format ("Success!" ))
569
+ outputs = [results , vcs_results ]
545
570
if environments .is_verbose ():
546
- click_echo (c .out .split ("RESULTS:" )[0 ], err = True )
571
+ for output in outputs :
572
+ click_echo (output .split ("RESULTS:" )[0 ], err = True )
547
573
try :
548
- return json .loads (c .out .split ("RESULTS:" )[1 ].strip ())
574
+ results = json .loads (results .split ("RESULTS:" )[1 ].strip ())
575
+ vcs_results = json .loads (vcs_results .split ("RESULTS:" )[1 ].strip ())
549
576
550
577
except (IndexError , JSONDecodeError ):
551
- click_echo (c .out .strip (), err = True )
552
- click_echo (c .err .strip (), err = True )
578
+ for out , err in [(c .out , c .err ), (vcs_results , vcs_err )]:
579
+ click_echo (out .strip (), err = True )
580
+ click_echo (err .strip (), err = True )
553
581
raise RuntimeError ("There was a problem with locking." )
582
+ return results , vcs_results
554
583
555
584
556
585
def resolve_deps (
0 commit comments