diff --git a/extra/git-tool/git-tool.factor b/extra/git-tool/git-tool.factor deleted file mode 100644 index ff45d32c65..0000000000 --- a/extra/git-tool/git-tool.factor +++ /dev/null @@ -1,470 +0,0 @@ - -USING: accessors combinators.cleave combinators.short-circuit -concurrency.combinators destructors fry io io.directories -io.encodings io.encodings.utf8 io.launcher io.monitors -io.pathnames io.pipes io.ports kernel locals math namespaces -sequences splitting strings threads ui ui.gadgets -ui.gadgets.buttons ui.gadgets.editors ui.gadgets.labels -ui.gadgets.packs ui.gadgets.tracks ; - -IN: git-tool - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: head** ( seq obj -- seq/f ) dup number? [ head ] [ dupd find drop head ] if ; - -: tail** ( seq obj -- seq/f ) - dup number? - [ tail ] - [ dupd find drop [ tail ] [ drop f ] if* ] - if ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -:: ( DESC -- process stream stream ) - [ - [let | STDOUT-PIPE [ (pipe) |dispose ] - STDERR-PIPE [ (pipe) |dispose ] | - - [let | PROCESS [ DESC >process ] | - - PROCESS - [ STDOUT-PIPE out>> or ] change-stdout - [ STDERR-PIPE out>> or ] change-stderr - run-detached - - STDOUT-PIPE out>> dispose - STDERR-PIPE out>> dispose - - STDOUT-PIPE in>> utf8 - STDERR-PIPE in>> utf8 ] ] - ] - with-destructors ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: run-process/result ( desc -- process ) - - { - [ contents [ string-lines ] [ f ] if* ] - [ contents [ string-lines ] [ f ] if* ] - } - parallel-spread - [ >>stdout ] [ >>stderr ] bi* - dup wait-for-process >>status ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! process popup windows -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: popup-window ( title contents -- ) - dup string? [ ] [ "\n" join ] if - tuck set-editor-string swap open-window ; - -: popup-process-window ( process -- ) - [ stdout>> [ "output" swap popup-window ] when* ] - [ stderr>> [ "error" swap popup-window ] when* ] - [ - [ stdout>> ] [ stderr>> ] bi or not - [ "Process" "NO OUTPUT" popup-window ] - when - ] - tri ; - -: popup-if-error ( process -- ) - { [ status>> 0 = not ] [ popup-process-window t ] } 1&& drop ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -:: git-process ( REPO DESC -- process ) - REPO [ DESC run-process/result ] with-directory ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: git-status-section ( lines section -- lines/f ) - '[ _ = ] tail** - [ - [ "#\t" head? ] tail** - [ "#\t" head? not ] head** - [ 2 tail ] map - ] - [ f ] - if* ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: colon ( -- ch ) CHAR: : ; -: space ( -- ch ) 32 ; - -: git-status-line-file ( line -- file ) - { [ colon = ] 1 [ space = not ] } [ tail** ] each ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -TUPLE: - repository - to-commit-new - to-commit-modified - to-commit-deleted - modified - deleted - untracked ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: check-empty ( seq -- seq/f ) dup empty? [ drop f ] when ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -:: refresh-git-status ( STATUS -- STATUS ) - - [let | LINES [ STATUS repository>> { "git" "status" } git-process stdout>> ] | - - STATUS - - LINES "# Changes to be committed:" git-status-section - [ "new file:" head? ] filter - [ git-status-line-file ] map - check-empty - >>to-commit-new - - LINES "# Changes to be committed:" git-status-section - [ "modified:" head? ] filter - [ git-status-line-file ] map - check-empty - >>to-commit-modified - - LINES "# Changes to be committed:" git-status-section - [ "deleted:" head? ] filter - [ git-status-line-file ] map - check-empty - >>to-commit-deleted - - LINES "# Changed but not updated:" git-status-section - [ "modified:" head? ] filter - [ git-status-line-file ] map - check-empty - >>modified - - LINES "# Changed but not updated:" git-status-section - [ "deleted:" head? ] filter - [ git-status-line-file ] map - check-empty - >>deleted - - LINES "# Untracked files:" git-status-section >>untracked ] ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -:: git-status ( REPO -- ) - - new REPO >>repository refresh-git-status ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -:: factor-git-status ( -- ) "resource:" git-status ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! git-tool -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: to-commit ( -- seq ) - { to-commit-new>> to-commit-modified>> to-commit-deleted>> } 1arr concat ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -:: refresh-status-pile ( STATUS PILE -- ) - - STATUS refresh-git-status drop - - PILE clear-gadget - - PILE - - ! Commit section - - [wlet | add-commit-path-button [| TEXT PATH | - - { 1 0 } - - TEXT