Compare commits

...

2 Commits

Author SHA1 Message Date
Jef Roosens 93c0dc9c4f
Added start of repo-add functionality 2022-01-09 22:30:07 +01:00
Jef Roosens 17038dc33c
First working upload streaming! 2022-01-09 22:18:04 +01:00
3 changed files with 43 additions and 27 deletions

View File

@ -4,10 +4,14 @@ import web
import os
import log
import io
import repo
const port = 8000
const buf_size = 1_000_000
const db_name = 'pieter.db.tar.gz'
struct App {
web.Context
api_key string [required; web_global]
@ -21,7 +25,7 @@ fn exit_with_message(code int, msg string) {
exit(code)
}
fn reader_to_file(mut reader io.BufferedReader, path string) ? {
fn reader_to_file(mut reader io.BufferedReader, length int, path string) ? {
// Open up a file for writing to
mut file := os.create(path) ?
defer {
@ -29,36 +33,26 @@ fn reader_to_file(mut reader io.BufferedReader, path string) ? {
}
mut buf := []byte{len: buf_size}
mut bytes_left := length
// Repeat as long as the stream still has data
for {
// TODO don't just endlessly loop if reading keeps failing
println('heey')
for bytes_left > 0 {
// TODO check if just breaking here is safe
bytes_read := reader.read(mut &buf) or {
println('youre here')
break
}
println(bytes_read)
bytes_read := reader.read(mut buf) or { break }
bytes_left -= bytes_read
mut to_write := bytes_read
for to_write > 0 {
// TODO don't just loop infinitely here
bytes_written := file.write(buf[bytes_read - to_write..bytes_read]) or {
println("$err.msg")
continue
}
println(bytes_written)
bytes_written := file.write(buf[bytes_read - to_write..bytes_read]) or { continue }
to_write = to_write - bytes_written
}
}
println('File complete!')
}
[put; '/pkgs/:pkg']
['/pkgs/:pkg'; put]
fn (mut app App) put_package(pkg string) web.Result {
full_path := os.join_path_single(app.repo_dir, pkg)
@ -66,11 +60,21 @@ fn (mut app App) put_package(pkg string) web.Result {
return app.text('File already exists.')
}
reader_to_file(mut app.reader, full_path) or {
return app.text('Failed to upload file.')
if length := app.req.header.get(.content_length) {
reader_to_file(mut app.reader, length.int(), full_path) or {
return app.text('Failed to upload file.')
}
} else {
return app.text("Content-Type header isn't set.")
}
return app.text('just stop')
repo.add_package(os.join_path_single(app.repo_dir, db_name), full_path) or {
os.rm(full_path) or { println('Failed to remove $full_path') }
return app.text('Failed to add package to repo.')
}
return app.text('Package added successfully.')
}
// ['/publish'; post]

12
vieter/repo.v 100644
View File

@ -0,0 +1,12 @@
module repo
import os
pub fn add_package(db_path string, pkg_path string) ? {
res := os.execute("repo-add '$db_path' '$pkg_path'")
if res.exit_code != 0 {
println(res.output)
return error('repo-add failed.')
}
}

View File

@ -447,13 +447,13 @@ fn handle_conn<T>(mut conn net.TcpConn, mut app T, routes map[string]Route) {
return
}
// req := http.parse_request(mut reader) or {
// // Prevents errors from being thrown when BufferedReader is empty
// if '$err' != 'none' {
// eprintln('error parsing request: $err')
// }
// return
// }
// req := http.parse_request(mut reader) or {
// // Prevents errors from being thrown when BufferedReader is empty
// if '$err' != 'none' {
// eprintln('error parsing request: $err')
// }
// return
// }
// URL Parse
url := urllib.parse(head.url) or {