Subversion Repositories Koakuma

Rev

Rev 4 | Rev 8 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

#!/usr/bin/env tclsh
# $Id: create-project.in 5 2024-10-01 18:07:27Z nishi $
package require tdom
set RPC_URL "http://127.0.0.1/koakuma/rpc"
foreach arg $argv {
        if { [string range "$arg" 0 0] == "-" } {
                if { "$arg" == "-h" || "$arg" == "--help" } {
                        puts "Usage: create-project"
                        puts "You can set the environment variable `KOAKUMA_RPC' to override default RPC URL."
                        puts "Default: $RPC_URL"        
                        exit 0
                }
        }
}
foreach path [glob "@@PREFIX@@/lib/koakuma/utility/*.tcl"] {
        source $path
}
if { [info exists "env(KOAKUMA_RPC)"] } {
        set RPC_URL "$env(KOAKUMA_RPC)"
}
set RPC_URL "[regsub {/+$} "$RPC_URL" ""]"
puts -nonewline "Authentication: "
set status [::rpc::require-auth]
if { $status == 1 } {
        puts "Required"
        if { ![::rpc::ask-auth] } {
                puts "Authentication failure"
                exit 1
        }
} elseif { $status < 0 } {
        puts "Got forbidden, cannot continue"
        exit 1
} else {
        puts "Not required"
}

dom createNodeCmd -tagName "name" -jsonType NONE elementNode keyName
dom createNodeCmd -tagName "description" -jsonType NONE elementNode keyDescription
dom createNodeCmd -tagName "vcs" -jsonType NONE elementNode keyVCS
dom createNodeCmd -tagName "url" -jsonType NONE elementNode keyURL

dom createNodeCmd -jsonType STRING textNode valueString

set doc [dom createDocumentNode]

proc ask_for {show var} {
        upvar 1 $var $var
        puts -nonewline "$show: "
        flush stdout
        set $var "[gets stdin]"
}

ask_for "Name" name
ask_for "Description" description
ask_for "VCS" vcs
ask_for "VCS URL" url

$doc appendFromScript {
        keyName {valueString "$name"}
        keyDescription {valueString "$description"}
        keyVCS {valueString "$vcs"}
        keyURL {valueString "$url"}
}
set result [::rpc::send "/create-project" "[$doc asJSON]"]
if { [lindex $result 0] == 200 } {
} else {
        set doc [dom parse -json "[lindex $result 1]"]
        puts "Error: [$doc selectNodes "string(/error)"]"
}