Skip to content

Commit

Permalink
Adapt to new IO. (#12)
Browse files Browse the repository at this point in the history
  • Loading branch information
floitsch committed Apr 4, 2024
1 parent d265946 commit 250d44f
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 24 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ jobs:
os: [ ubuntu-latest, windows-latest, macos-latest ]
# The versions should contain (at least) the lowest requirement
# and a version that is more up to date.
toit-version: [ v2.0.0-alpha.128, latest ]
toit-version: [ v2.0.0-alpha.144, latest ]
include:
- toit-version: v2.0.0-alpha.128
- toit-version: v2.0.0-alpha.144
version-name: old
- toit-version: latest
version-name: new
Expand Down
2 changes: 1 addition & 1 deletion package.lock
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sdk: ^2.0.0-alpha.121
sdk: ^2.0.0-alpha.144
2 changes: 1 addition & 1 deletion package.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: ar
description: Toit package for reading and writing 'ar' (archive) files.
environment:
sdk: ^2.0.0-alpha.121
sdk: ^2.0.0-alpha.144
28 changes: 20 additions & 8 deletions src/ar.toit
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
// found in the package's LICENSE file.
import bytes
import writer show Writer
import reader show Reader BufferedReader
import io
import reader show Reader

AR-HEADER_ ::= "!<arch>\x0A"

Expand Down Expand Up @@ -41,10 +41,19 @@ An 'ar' archiver.
Writes the given files into the writer in the 'ar' file format.
*/
class ArWriter:
writer_ ::= ?
writer_/io.Writer ::= ?

/**
Takes an $io.Writer as argument.
For compatibility reasons, also accepts an "old-style" writer. This is
deprecated and will be removed in the future.
*/
constructor writer:
writer_ = Writer writer
if writer is io.Writer:
writer_ = writer
else:
writer_ = io.Writer.adapt writer
write-ar-header_

/**
Expand Down Expand Up @@ -151,15 +160,18 @@ class ArFileOffsets:
constructor .name .from .to:

class ArReader:
reader_ / BufferedReader
reader_ / io.Reader
offset_ / int := 0

constructor reader/Reader:
reader_ = BufferedReader reader
if reader is io.Reader:
reader_ = reader as io.Reader
else:
reader_ = io.Reader.adapt reader
skip-header_

constructor.from-bytes buffer/ByteArray:
return ArReader (bytes.Reader buffer)
return ArReader (io.Reader buffer)

/// Returns the next file in the archive.
/// Returns null if none is left.
Expand Down Expand Up @@ -246,7 +258,7 @@ class ArReader:
is-padded_ size/int: return size & 1 == 1

read-name_ -> string?:
if not reader_.can-ensure 1: return null
if not reader_.try-ensure-buffered 1: return null
name / string := reader-read-string_ FILE-NAME-SIZE_
name = name.trim --right
if name.ends-with "/": name = name.trim --right "/"
Expand Down
16 changes: 8 additions & 8 deletions tests/ar_test.toit
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@
import expect show *
import ar show *
import bytes
import host.directory
import host.file
import host.pipe
import writer show Writer
import io
import system

TESTS ::= [
Expand All @@ -32,7 +31,7 @@ TESTS ::= [
]

write-ar file-mapping/Map --add-with-ar-file/bool=false:
writer := bytes.Buffer
writer := io.Buffer
ar-writer := ArWriter writer
file-mapping.do: |name content|
if add-with-ar-file:
Expand All @@ -47,7 +46,7 @@ run-test file-mapping/Map tmp-dir [generate-ar]:

seen := {}
count := 0
ar-reader := ArReader (bytes.Reader ba)
ar-reader := ArReader (io.Reader ba)
ar-reader.do: |file/ArFile|
count++
seen.add file.name
Expand All @@ -70,7 +69,7 @@ run-test file-mapping/Map tmp-dir [generate-ar]:
expect-equals seen.size count
expect-equals file-mapping.size count

ar-reader = ArReader (bytes.Reader ba)
ar-reader = ArReader (io.Reader ba)
// We should find all files if we advance from top to bottom.
last-name := null
file-mapping.do: |name content|
Expand All @@ -86,7 +85,7 @@ run-test file-mapping/Map tmp-dir [generate-ar]:
actual := ba.copy file-offsets.from file-offsets.to
expect-equals content actual

ar-reader = ArReader (bytes.Reader ba)
ar-reader = ArReader (io.Reader ba)
ar-file := ar-reader.find "not there"
expect-null ar-file
if last-name:
Expand All @@ -111,7 +110,7 @@ run-test file-mapping/Map tmp-dir [generate-ar]:

test-path := "$tmp-dir/test.a"
stream := file.Stream.for-write test-path
(Writer stream).write ba
stream.out.write ba
stream.close
file-mapping.do: |name expected-content|
actual := extract test-path name
Expand All @@ -121,7 +120,8 @@ extract archive-file contained-file -> ByteArray:
// 'p' prints the $contained_file onto stdout.
from := pipe.from "ar" "p" archive-file contained-file
result := ByteArray 0
while next := from.read:
reader := from.in
while next := reader.read:
result += next
from.close
return result
Expand Down
6 changes: 3 additions & 3 deletions tests/package.lock
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
sdk: ^2.0.0-alpha.128
sdk: ^2.0.0-alpha.144
prefixes:
ar: ..
host: pkg-host
Expand All @@ -8,5 +8,5 @@ packages:
pkg-host:
url: github.com/toitlang/pkg-host
name: host
version: 1.14.1
hash: da453fb59f7ef3d37f39e4b438495f7c16614733
version: 1.15.0
hash: 2588faa0c7553eca9a85cb6f829f3df41d9466f2
2 changes: 1 addition & 1 deletion tests/package.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ dependencies:
path: ..
host:
url: github.com/toitlang/pkg-host
version: ^1.14.1
version: ^1.15.0

0 comments on commit 250d44f

Please sign in to comment.