Fixes parallel raco make of relative paths including subdirectories
closes PR 12953
This commit is contained in:
parent
66eaa191e5
commit
38e90b52c4
|
@ -64,7 +64,12 @@
|
||||||
(define (->bytes x)
|
(define (->bytes x)
|
||||||
(cond [(path? x) (path->bytes x)]
|
(cond [(path? x) (path->bytes x)]
|
||||||
[(string? x) (string->bytes/locale x)]
|
[(string? x) (string->bytes/locale x)]
|
||||||
[(equal? x 'relative) (->bytes (path->complete-path (current-directory)))]))
|
[(equal? x 'relative) (->bytes (path->complete-path (current-directory)))]
|
||||||
|
[else (raise-argument-error '->bytes "(or/c path? string? 'relative)" x)]))
|
||||||
|
|
||||||
|
(define (dir->bytes x)
|
||||||
|
(cond [(path? x) (path->bytes (path->complete-path x))]
|
||||||
|
[else (->bytes x)]))
|
||||||
|
|
||||||
(define collects-queue%
|
(define collects-queue%
|
||||||
(class* object% (work-queue<%>)
|
(class* object% (work-queue<%>)
|
||||||
|
@ -118,7 +123,7 @@
|
||||||
(values
|
(values
|
||||||
(list cc file last)
|
(list cc file last)
|
||||||
(list (->bytes (cc-name cc))
|
(list (->bytes (cc-name cc))
|
||||||
(->bytes (cc-path cc))
|
(dir->bytes (cc-path cc))
|
||||||
(->bytes file)
|
(->bytes file)
|
||||||
options)))
|
options)))
|
||||||
(match cc
|
(match cc
|
||||||
|
@ -189,6 +194,7 @@
|
||||||
(class* object% (work-queue<%>)
|
(class* object% (work-queue<%>)
|
||||||
(init-field filelist handler options)
|
(init-field filelist handler options)
|
||||||
(field (lock-mgr (new lock-manager%)))
|
(field (lock-mgr (new lock-manager%)))
|
||||||
|
(field [results (void)])
|
||||||
(inspect #f)
|
(inspect #f)
|
||||||
|
|
||||||
(define/public (work-done work wrkr msg)
|
(define/public (work-done work wrkr msg)
|
||||||
|
@ -197,7 +203,9 @@
|
||||||
(match result-type
|
(match result-type
|
||||||
[(list 'LOCK fn) (lm/lock lock-mgr fn wrkr) #f]
|
[(list 'LOCK fn) (lm/lock lock-mgr fn wrkr) #f]
|
||||||
[(list 'UNLOCK fn) (lm/unlock lock-mgr fn) #f]
|
[(list 'UNLOCK fn) (lm/unlock lock-mgr fn) #f]
|
||||||
[(list 'ERROR msg) (handler 'error work msg out err) #t]
|
[(list 'ERROR msg) (handler 'error work msg out err)
|
||||||
|
(set! results #f)
|
||||||
|
#t]
|
||||||
['DONE
|
['DONE
|
||||||
(define (string-!empty? s) (not (zero? (string-length s))))
|
(define (string-!empty? s) (not (zero? (string-length s))))
|
||||||
(if (ormap string-!empty? (list out err))
|
(if (ormap string-!empty? (list out err))
|
||||||
|
@ -212,11 +220,11 @@
|
||||||
[(cons hd tail)
|
[(cons hd tail)
|
||||||
(define-values (dir file b) (split-path hd))
|
(define-values (dir file b) (split-path hd))
|
||||||
(set! filelist tail)
|
(set! filelist tail)
|
||||||
(values hd (list (->bytes hd) (->bytes dir) (->bytes file) null))]
|
(values hd (list (->bytes hd) (dir->bytes dir) (->bytes file) null))]
|
||||||
[(list) null]))
|
[(list) null]))
|
||||||
(define/public (has-jobs?) (not (null? filelist)))
|
(define/public (has-jobs?) (not (null? filelist)))
|
||||||
(define/public (jobs-cnt) (length filelist))
|
(define/public (jobs-cnt) (length filelist))
|
||||||
(define/public (get-results) (void))
|
(define/public (get-results) results)
|
||||||
(super-new)))
|
(super-new)))
|
||||||
|
|
||||||
(define (parallel-build work-queue worker-count)
|
(define (parallel-build work-queue worker-count)
|
||||||
|
@ -281,7 +289,6 @@
|
||||||
[current-error-port err-str-port]
|
[current-error-port err-str-port]
|
||||||
;[manager-compile-notify-handler pp]
|
;[manager-compile-notify-handler pp]
|
||||||
)
|
)
|
||||||
|
|
||||||
(cmc (build-path dir file)))
|
(cmc (build-path dir file)))
|
||||||
(send/resp 'DONE))]
|
(send/resp 'DONE))]
|
||||||
[x (send/error (format "DIDNT MATCH A ~v\n" x))]
|
[x (send/error (format "DIDNT MATCH A ~v\n" x))]
|
||||||
|
@ -291,7 +298,8 @@
|
||||||
#:worker-count [worker-count (processor-count)]
|
#:worker-count [worker-count (processor-count)]
|
||||||
#:handler [handler void]
|
#:handler [handler void]
|
||||||
#:options [options '()])
|
#:options [options '()])
|
||||||
(parallel-build (make-object file-list-queue% list-of-files handler options) worker-count))
|
(or (parallel-build (make-object file-list-queue% list-of-files handler options) worker-count)
|
||||||
|
(exit 1)))
|
||||||
|
|
||||||
(define (parallel-compile worker-count setup-fprintf append-error collects-tree)
|
(define (parallel-compile worker-count setup-fprintf append-error collects-tree)
|
||||||
(setup-fprintf (current-output-port) #f "--- parallel build using ~a processes ---" worker-count)
|
(setup-fprintf (current-output-port) #f "--- parallel build using ~a processes ---" worker-count)
|
||||||
|
|
|
@ -21,4 +21,18 @@
|
||||||
(err/rt-test (path->relative-string/setup #"bleh"))
|
(err/rt-test (path->relative-string/setup #"bleh"))
|
||||||
(err/rt-test (path->relative-string/setup 'bleh)))
|
(err/rt-test (path->relative-string/setup 'bleh)))
|
||||||
|
|
||||||
|
(require unstable/file)
|
||||||
|
(let ()
|
||||||
|
(define tmpdir (make-temporary-file "tmp~a" 'directory (current-directory)))
|
||||||
|
(define tmppath (build-path tmpdir "tmp.rkt"))
|
||||||
|
(with-output-to-file (build-path tmpdir "tmp.rkt") #:exists 'replace
|
||||||
|
(lambda ()
|
||||||
|
(printf "#lang racket\n")))
|
||||||
|
(define exec-path (find-system-path 'exec-file))
|
||||||
|
(define relpath (find-relative-path (current-directory) tmppath))
|
||||||
|
|
||||||
|
(test #t system* exec-path "-l" "raco" "make" "-j" "2" (path->string relpath))
|
||||||
|
(delete-directory/files tmpdir))
|
||||||
|
|
||||||
|
|
||||||
(report-errs)
|
(report-errs)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user