2008-09-16 00:20:33 -04:00
|
|
|
! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
|
|
USING: kernel namespaces sequences splitting system accessors
|
2008-12-15 02:13:35 -05:00
|
|
|
math.functions make io io.files io.pathnames io.directories
|
2009-04-13 20:03:17 -04:00
|
|
|
io.directories.hierarchy io.launcher io.encodings.utf8 prettyprint
|
2008-12-15 02:13:35 -05:00
|
|
|
combinators.short-circuit parser combinators calendar
|
2009-04-17 21:59:59 -04:00
|
|
|
calendar.format arrays mason.config locals system debugger ;
|
2008-09-16 00:20:33 -04:00
|
|
|
IN: mason.common
|
|
|
|
|
2009-04-17 21:59:59 -04:00
|
|
|
ERROR: output-process-error output process ;
|
|
|
|
|
|
|
|
M: output-process-error error.
|
|
|
|
[ "Process:" print process>> . nl ]
|
|
|
|
[ "Output:" print output>> print ]
|
|
|
|
bi ;
|
|
|
|
|
|
|
|
: try-output-process ( command -- )
|
|
|
|
>process +stdout+ >>stderr utf8 <process-reader*>
|
2009-05-01 11:41:27 -04:00
|
|
|
[ stream-contents ] [ dup wait-for-process ] bi*
|
2009-04-17 21:59:59 -04:00
|
|
|
0 = [ 2drop ] [ output-process-error ] if ;
|
|
|
|
|
2009-04-13 20:03:17 -04:00
|
|
|
HOOK: really-delete-tree os ( path -- )
|
|
|
|
|
|
|
|
M: windows really-delete-tree
|
|
|
|
#! Workaround: Cygwin GIT creates read-only files for
|
|
|
|
#! some reason.
|
2009-04-17 21:59:59 -04:00
|
|
|
[ { "chmod" "ug+rw" "-R" } swap (normalize-path) suffix try-output-process ]
|
2009-04-13 20:03:17 -04:00
|
|
|
[ delete-tree ]
|
|
|
|
bi ;
|
|
|
|
|
|
|
|
M: unix really-delete-tree delete-tree ;
|
|
|
|
|
2008-09-16 00:20:33 -04:00
|
|
|
: short-running-process ( command -- )
|
|
|
|
#! Give network operations at most 15 minutes to complete.
|
|
|
|
<process>
|
|
|
|
swap >>command
|
|
|
|
15 minutes >>timeout
|
2009-04-17 21:59:59 -04:00
|
|
|
try-output-process ;
|
2008-09-16 00:20:33 -04:00
|
|
|
|
2008-11-16 12:29:35 -05:00
|
|
|
:: upload-safely ( local username host remote -- )
|
|
|
|
[let* | temp [ remote ".incomplete" append ]
|
2008-11-24 17:49:50 -05:00
|
|
|
scp-remote [ { username "@" host ":" temp } concat ]
|
|
|
|
scp [ scp-command get ]
|
|
|
|
ssh [ ssh-command get ] |
|
|
|
|
{ scp local scp-remote } short-running-process
|
|
|
|
{ ssh host "-l" username "mv" temp remote } short-running-process
|
2008-11-16 12:29:35 -05:00
|
|
|
] ;
|
|
|
|
|
2008-09-16 00:20:33 -04:00
|
|
|
: eval-file ( file -- obj )
|
|
|
|
dup utf8 file-lines parse-fresh
|
|
|
|
[ "Empty file: " swap append throw ] [ nip first ] if-empty ;
|
|
|
|
|
|
|
|
: cat ( file -- ) utf8 file-contents print ;
|
|
|
|
|
|
|
|
: cat-n ( file n -- ) [ utf8 file-lines ] dip short tail* [ print ] each ;
|
|
|
|
|
|
|
|
: to-file ( object file -- ) utf8 [ . ] with-file-writer ;
|
|
|
|
|
|
|
|
: datestamp ( timestamp -- string )
|
|
|
|
[
|
|
|
|
{
|
|
|
|
[ year>> , ]
|
|
|
|
[ month>> , ]
|
|
|
|
[ day>> , ]
|
|
|
|
[ hour>> , ]
|
|
|
|
[ minute>> , ]
|
|
|
|
} cleave
|
|
|
|
] { } make [ pad-00 ] map "-" join ;
|
|
|
|
|
|
|
|
: milli-seconds>time ( n -- string )
|
|
|
|
millis>timestamp
|
|
|
|
[ hour>> ] [ minute>> ] [ second>> floor ] tri 3array
|
|
|
|
[ pad-00 ] map ":" join ;
|
|
|
|
|
|
|
|
SYMBOL: stamp
|
|
|
|
|
|
|
|
: builds/factor ( -- path ) builds-dir get "factor" append-path ;
|
|
|
|
: build-dir ( -- path ) builds-dir get stamp get append-path ;
|
|
|
|
|
|
|
|
: prepare-build-machine ( -- )
|
|
|
|
builds-dir get make-directories
|
|
|
|
builds-dir get
|
2009-04-17 21:59:59 -04:00
|
|
|
[ { "git" "clone" "git://factorcode.org/git/factor.git" } try-output-process ]
|
2008-09-16 00:20:33 -04:00
|
|
|
with-directory ;
|
|
|
|
|
|
|
|
: git-id ( -- id )
|
2008-09-18 19:23:46 -04:00
|
|
|
{ "git" "show" } utf8 [ readln ] with-process-reader
|
2008-09-16 00:20:33 -04:00
|
|
|
" " split second ;
|
|
|
|
|
|
|
|
: ?prepare-build-machine ( -- )
|
|
|
|
builds/factor exists? [ prepare-build-machine ] unless ;
|
|
|
|
|
2009-02-23 22:40:17 -05:00
|
|
|
CONSTANT: load-everything-vocabs-file "load-everything-vocabs"
|
|
|
|
CONSTANT: load-everything-errors-file "load-everything-errors"
|
2008-09-16 00:20:33 -04:00
|
|
|
|
2009-02-23 22:40:17 -05:00
|
|
|
CONSTANT: test-all-vocabs-file "test-all-vocabs"
|
|
|
|
CONSTANT: test-all-errors-file "test-all-errors"
|
2008-09-16 00:20:33 -04:00
|
|
|
|
2009-02-23 22:40:17 -05:00
|
|
|
CONSTANT: help-lint-vocabs-file "help-lint-vocabs"
|
|
|
|
CONSTANT: help-lint-errors-file "help-lint-errors"
|
2008-09-16 00:20:33 -04:00
|
|
|
|
2009-04-14 17:37:33 -04:00
|
|
|
CONSTANT: compiler-errors-file "compiler-errors"
|
|
|
|
CONSTANT: compiler-error-messages-file "compiler-error-messages"
|
|
|
|
|
2009-02-23 22:40:17 -05:00
|
|
|
CONSTANT: boot-time-file "boot-time"
|
|
|
|
CONSTANT: load-time-file "load-time"
|
|
|
|
CONSTANT: test-time-file "test-time"
|
|
|
|
CONSTANT: help-lint-time-file "help-lint-time"
|
|
|
|
CONSTANT: benchmark-time-file "benchmark-time"
|
|
|
|
CONSTANT: html-help-time-file "html-help-time"
|
2008-09-16 00:20:33 -04:00
|
|
|
|
2009-02-23 22:40:17 -05:00
|
|
|
CONSTANT: benchmarks-file "benchmarks"
|
2009-04-17 18:55:33 -04:00
|
|
|
CONSTANT: benchmark-error-messages-file "benchmark-error-messages"
|
|
|
|
CONSTANT: benchmark-error-vocabs-file "benchmark-error-vocabs"
|
2008-09-16 00:20:33 -04:00
|
|
|
|
|
|
|
SYMBOL: status-error ! didn't bootstrap, or crashed
|
|
|
|
SYMBOL: status-dirty ! bootstrapped but not all tests passed
|
|
|
|
SYMBOL: status-clean ! everything good
|