load "system"; load "file"; load "sql"; load "sql_utils"; load "array"; load "encode_int"; load "encode_xml"; #file-as-code config.spl #file-as-code common.spl var user_name2id; debug "Importing users ..."; foreach[] file (system("cd ${argv[0]} && find password -type f -name '*.txt'") =~ /[^\n]+/Ag) { var user = file =~ s,password/(.*)\.txt,$1,R; var user_desc = ""; if (file_access("${argv[0]}/user/${user}.desc", "R")) user_desc = file_read("${argv[0]}/user/${user}.desc"); var user_email = ""; if (file_access("${argv[0]}/user/${user}.email", "R")) user_email = file_read("${argv[0]}/user/${user}.email") =~ s/\n//Rg; sql(db, <:> : INSERT INTO : user : SET : user_name = ${mysql::user}, : user_email = ${mysql::user_email}, : user_desc = ${mysql::user_desc}, : user_crypt = ${mysql::(file_read("${argv[0]}/password/${user}.txt") =~ s/\n//Rg)}, : user_isadmin = ${mysql::file_access("${argv[0]}/password/${user}.super")} ); user_name2id[user] = sql_value(db, "SELECT last_insert_id()"); } debug "Importing vote pattern ..."; votepattern_import(file_read("oldimport.vp")); debug "Importing patches ..."; var patch_counter = 0; foreach[] file (system("cd ${argv[0]} && find data -type f -name '*.patch'") =~ /[^\n]+/Ag) { var prefix = file =~ s,\.patch$,,Rg; var uid = prefix =~ s,^data/|/,,Rg; prefix = "${argv[0]}/$prefix"; var text = file_read("${prefix}.patch", "ascii"); if (lengthof text > 512*1024) { debug "Not importing patch $uid: to big."; continue; } var status = 'O'; if (file_access("${prefix}.done", "R")) status = file_read("${prefix}.done", "ascii") =~ s/[a-z].*//Rs; var owner = file_read("${prefix}.owner", "ascii") =~ s/\n//Rg; if (not declared user_name2id[owner]) { debug "Not importing patch $uid: unkown owner."; continue; } sql(db, <:> : INSERT INTO : patch : SET : patch_uid = ${mysql::uid}, : patch_status = ${mysql::status}, : patch_origtext = ${mysql::text}, : user_id_owner = ${int::user_name2id[owner]} : ; ); var patch_id = sql_value(db, "SELECT last_insert_id()"); patch_fixup(patch_id); foreach[] msg (file_read("${prefix}.msg", "ascii") =~ /[^\n]*/Ag) { msg =~ e/&#([0-9]+);/g chr($1); if (msg !~ /^\((?P\S+)\)\s+(?P.*)/I) continue; text =~ /(?P.{0,60}\S*)\s*(?P.*)/I; sql(db, <:> : INSERT INTO : msg : SET : msg_title = ${mysql::A}, : msg_text = ${mysql::B}, : user_id = ${int::user_name2id[user]} ); sql(db, <:> : INSERT INTO : msg_patch : SET : patch_id = $patch_id, : msg_id = last_insert_id() ); } foreach[] vote (file_read("${prefix}.votes", "ascii") =~ /[^\n]*/Ag) { if (vote !~ /^(?P\S+)\s+(?P\S+)/I) continue; sql(db, <:> : INSERT INTO : vote : SET : vote_type = ${mysql::type}, : patch_id = $patch_id, : user_id = ${int::user_name2id[user]} ); } if (patch_counter % 50 == 0) { if (patch_counter) write("\n"); write(fmt("%5d ", patch_counter)); } write("."); patch_counter++; } write("\n"); debug "Import complete.";