]> Git repositories of Nishi - koakuma.git/commitdiff
stuff
authorNishi <nishi@nishi.boats>
Tue, 1 Oct 2024 22:57:18 +0000 (22:57 +0000)
committerNishi <nishi@nishi.boats>
Tue, 1 Oct 2024 22:57:18 +0000 (22:57 +0000)
git-svn-id: file:///raid/svn-personal/koakuma/trunk@6 219d0f9c-2d94-d447-890a-813e76b88fe9

Component/vcs_cvs.tcl
Component/vcs_svn.tcl
koakuma.cgi.in

index da85380c3e1ca1942e14f9469b89d80101829486..ab1a9da74d29bc150a16744177b21e2b5382e9c0 100644 (file)
@@ -1,5 +1,5 @@
 # $Id$
-lappend components "CVS" "CVS Integration" "1.00"
+lappend components "CVS" "CVS Integration" "1.00" "VCS"
 
 proc CVS_info {} {
        regexp {[0-9]+\.[0-9]+\.[0-9]+} "[exec cvs --version]" version
index a2a7cdef988b48cf7f2f6122de75543eddc0071b..06e3736a83127a54bf380b2bfc783cc563fec5dd 100644 (file)
@@ -1,5 +1,5 @@
 # $Id$
-lappend components "Subversion" "Subversion Integration" "1.00"
+lappend components "Subversion" "Subversion Integration" "1.00" "VCS"
 
 proc Subversion_info {} {
        regexp {[0-9]+\.[0-9]+\.[0-9]+} "[exec svn --version]" version
index 870d273473531d62e19eefd97944a15fec57a209..0f54d99876603b41acc4dc3f4bec6334535a4e62 100644 (file)
@@ -10,7 +10,7 @@ proc exiting {code} {
 
 proc loop_components {run} {
        global components
-       foreach {name description version} $components {
+       foreach {name description version genre} $components {
                eval $run
        }
 }
@@ -53,8 +53,13 @@ if { ![info exists env(PATH_INFO)] } {
 if { [catch {
        package require tdom
        dom createNodeCmd -tagName "rpc" elementNode rootXML
+       dom createNodeCmd -tagName "project" elementNode keyProject
        dom createNodeCmd -tagName "version" -jsonType NONE elementNode keyVersion
        dom createNodeCmd -tagName "error" -jsonType NONE elementNode keyError
+       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
 }] } {
        crash "Failed to load tDOM"
@@ -82,6 +87,26 @@ set toc ""
 set result ""
 set content ""
 
+proc write_db {data} {
+       set fid [open "@@PREFIX@@/lib/koakuma/db/projects.db" "w"]
+       puts $fid "$data"
+       close $fid
+}
+
+proc readall_db {} {
+       set data ""
+       set fid [open "@@PREFIX@@/lib/koakuma/db/projects.db" "r"]
+       while { [gets $fid line] >= 0 } {
+               if { "$data" == "" } {
+                       set data "$line"
+               } else {
+                       set data "$data\n$line"
+               }
+       }
+       close $fid
+       return "$data"
+}
+
 proc rputs {data} {
        global result
        if { "$result" == "" } {
@@ -293,30 +318,58 @@ if { [catch {
                        } else {
                                set projname "[$clidoc selectNodes "string(/name)"]"
                                set projdescription "[$clidoc selectNodes "string(/description)"]"
-                               set vcs "[$clidoc selectNodes "string(/vcs)"]"
+                               set projvcs "[$clidoc selectNodes "string(/vcs)"]"
                                set url "[$clidoc selectNodes "string(/url)"]"
-                               if { "$projname" == "" || "$projdescription" == "" || "$vcs" == "" || "$url" == "" } {
+                               if { "$projname" == "" || "$projdescription" == "" || "$projvcs" == "" || "$url" == "" } {
                                        rputs "Status: 400 Bad Request"
                                        $doc appendFromScript {
                                                keyError {valueString "Required field missing"}
                                        }
                                } else {
                                        set has_vcs 0
+                                       set has_name 0
                                        loop_components {
                                                upvar 1 has_vcs has_vcs
-                                               upvar 1 vcs vcs
-                                               if { "$name" == "$vcs" } {
+                                               upvar 1 projvcs projvcs
+                                               if { "$name" == "$projvcs" && "$genre" == "VCS" } {
                                                        set has_vcs 1
                                                        break
                                                }
                                        }
+                                       open_projects
+                                       scan_projects {
+                                               upvar 1 has_name has_name
+                                               upvar 1 projname projname
+                                               if { "$name" == "$projname" } {
+                                                       set has_name 1
+                                                       break
+                                               }
+                                       }
+                                       close_projects
                                        if { $has_vcs == 0 } {
                                                rputs "Status: 400 Bad Request"
                                                $doc appendFromScript {
                                                        keyError {valueString "Not a valid VCS"}
                                                }
+                                       } elseif { $has_name == 1 } {
+                                               rputs "Status: 400 Bad Request"
+                                               $doc appendFromScript {
+                                                       keyError {valueString "Project already exists"}
+                                               }
                                        } else {
                                                open_projects
+                                               set xml "[readall_db]"
+                                               set xmldoc [dom parse "$xml"]
+                                               set root [$xmldoc documentElement]
+                                               $root appendFromScript {
+                                                       keyProject {
+                                                               keyName {valueString "$projname"}
+                                                               keyDescription {valueString "$projdescription"}
+                                                               keyVCS {valueString "$projvcs"}
+                                                               keyURL {valueString "$url"}
+                                                       }
+                                               }
+                                               write_db "[$xmldoc asXML]"
                                                close_projects
                                        }
                                }