Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
ollama
Commits
37f9c8ad
Unverified
Commit
37f9c8ad
authored
Apr 26, 2024
by
Blake Mizerany
Committed by
GitHub
Apr 26, 2024
Browse files
types/model: overhaul Name and Digest types (#3924)
parent
2a80f55e
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
528 additions
and
1412 deletions
+528
-1412
server/images.go
server/images.go
+9
-2
types/model/digest.go
types/model/digest.go
+0
-87
types/model/digest_test.go
types/model/digest_test.go
+0
-46
types/model/name.go
types/model/name.go
+297
-625
types/model/name_test.go
types/model/name_test.go
+221
-641
types/model/testdata/fuzz/FuzzName/d37463aa416f6bab
types/model/testdata/fuzz/FuzzName/d37463aa416f6bab
+1
-1
types/model/testdata/fuzz/FuzzParseRef/1d43ee52085cb4aa
types/model/testdata/fuzz/FuzzParseRef/1d43ee52085cb4aa
+0
-2
types/model/testdata/fuzz/FuzzParseRef/27fd759314f0e6d6
types/model/testdata/fuzz/FuzzParseRef/27fd759314f0e6d6
+0
-2
types/model/testdata/fuzz/FuzzParseRef/3e3b70dba384074d
types/model/testdata/fuzz/FuzzParseRef/3e3b70dba384074d
+0
-2
types/model/testdata/fuzz/FuzzParseRef/71f1fdff711b6dab
types/model/testdata/fuzz/FuzzParseRef/71f1fdff711b6dab
+0
-2
types/model/testdata/fuzz/FuzzParseRef/b51b1c875e61a948
types/model/testdata/fuzz/FuzzParseRef/b51b1c875e61a948
+0
-2
No files found.
server/images.go
View file @
37f9c8ad
...
@@ -703,17 +703,24 @@ func convertModel(name, path string, fn func(resp api.ProgressResponse)) (string
...
@@ -703,17 +703,24 @@ func convertModel(name, path string, fn func(resp api.ProgressResponse)) (string
}
}
func
CopyModel
(
src
,
dst
model
.
Name
)
error
{
func
CopyModel
(
src
,
dst
model
.
Name
)
error
{
if
!
dst
.
IsFullyQualified
()
{
return
model
.
Unqualified
(
dst
)
}
if
!
src
.
IsFullyQualified
()
{
return
model
.
Unqualified
(
src
)
}
manifests
,
err
:=
GetManifestPath
()
manifests
,
err
:=
GetManifestPath
()
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
dstpath
:=
filepath
.
Join
(
manifests
,
dst
.
Filepath
NoBuild
())
dstpath
:=
filepath
.
Join
(
manifests
,
dst
.
Filepath
())
if
err
:=
os
.
MkdirAll
(
filepath
.
Dir
(
dstpath
),
0
o755
);
err
!=
nil
{
if
err
:=
os
.
MkdirAll
(
filepath
.
Dir
(
dstpath
),
0
o755
);
err
!=
nil
{
return
err
return
err
}
}
srcpath
:=
filepath
.
Join
(
manifests
,
src
.
Filepath
NoBuild
())
srcpath
:=
filepath
.
Join
(
manifests
,
src
.
Filepath
())
srcfile
,
err
:=
os
.
Open
(
srcpath
)
srcfile
,
err
:=
os
.
Open
(
srcpath
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
...
...
types/model/digest.go
deleted
100644 → 0
View file @
2a80f55e
package
model
import
(
"fmt"
"log/slog"
"strings"
"unicode"
)
// Digest represents a digest of a model Manifest. It is a comparable value
// type and is immutable.
//
// The zero Digest is not a valid digest.
type
Digest
struct
{
s
string
}
// Split returns the digest type and the digest value.
func
(
d
Digest
)
Split
()
(
typ
,
digest
string
)
{
typ
,
digest
,
_
=
strings
.
Cut
(
d
.
s
,
"-"
)
return
}
// String returns the digest in the form of "<digest-type>-<digest>", or the
// empty string if the digest is invalid.
func
(
d
Digest
)
String
()
string
{
return
d
.
s
}
// IsValid returns true if the digest is valid (not zero).
//
// A valid digest may be created only by ParseDigest, or
// ParseName(name).Digest().
func
(
d
Digest
)
IsValid
()
bool
{
return
d
.
s
!=
""
}
// LogValue implements slog.Value.
func
(
d
Digest
)
LogValue
()
slog
.
Value
{
return
slog
.
StringValue
(
d
.
String
())
}
var
(
_
slog
.
LogValuer
=
Digest
{}
)
// ParseDigest parses a string in the form of "<digest-type>-<digest>" into a
// Digest.
func
ParseDigest
(
s
string
)
Digest
{
typ
,
digest
,
ok
:=
strings
.
Cut
(
s
,
"-"
)
if
!
ok
{
typ
,
digest
,
ok
=
strings
.
Cut
(
s
,
":"
)
}
if
ok
&&
isValidDigestType
(
typ
)
&&
isValidHex
(
digest
)
&&
len
(
digest
)
>=
2
{
return
Digest
{
s
:
fmt
.
Sprintf
(
"%s-%s"
,
typ
,
digest
)}
}
return
Digest
{}
}
func
MustParseDigest
(
s
string
)
Digest
{
d
:=
ParseDigest
(
s
)
if
!
d
.
IsValid
()
{
panic
(
fmt
.
Sprintf
(
"invalid digest: %q"
,
s
))
}
return
d
}
func
isValidDigestType
(
s
string
)
bool
{
if
len
(
s
)
==
0
{
return
false
}
for
_
,
r
:=
range
s
{
if
!
unicode
.
IsLower
(
r
)
&&
!
unicode
.
IsDigit
(
r
)
{
return
false
}
}
return
true
}
func
isValidHex
(
s
string
)
bool
{
if
len
(
s
)
==
0
{
return
false
}
for
i
:=
range
s
{
c
:=
s
[
i
]
if
c
<
'0'
||
c
>
'9'
&&
c
<
'a'
||
c
>
'f'
{
return
false
}
}
return
true
}
types/model/digest_test.go
deleted
100644 → 0
View file @
2a80f55e
package
model
import
"testing"
var
testDigests
=
map
[
string
]
Digest
{
""
:
{},
"sha256-1234"
:
{
s
:
"sha256-1234"
},
"sha256-5678"
:
{
s
:
"sha256-5678"
},
"blake2-9abc"
:
{
s
:
"blake2-9abc"
},
"-1234"
:
{},
"sha256-"
:
{},
"sha256-1234-5678"
:
{},
"sha256-P"
:
{},
// invalid hex
"sha256-1234P"
:
{},
"---"
:
{},
}
func
TestDigestParse
(
t
*
testing
.
T
)
{
// Test cases.
for
s
,
want
:=
range
testDigests
{
got
:=
ParseDigest
(
s
)
t
.
Logf
(
"ParseDigest(%q) = %#v"
,
s
,
got
)
if
got
!=
want
{
t
.
Errorf
(
"ParseDigest(%q) = %q; want %q"
,
s
,
got
,
want
)
}
}
}
func
TestDigestString
(
t
*
testing
.
T
)
{
// Test cases.
for
s
,
d
:=
range
testDigests
{
want
:=
s
if
!
d
.
IsValid
()
{
want
=
""
}
got
:=
d
.
String
()
if
got
!=
want
{
t
.
Errorf
(
"ParseDigest(%q).String() = %q; want %q"
,
s
,
got
,
want
)
}
got
=
ParseDigest
(
s
)
.
String
()
if
got
!=
want
{
t
.
Errorf
(
"roundtrip ParseDigest(%q).String() = %q; want %q"
,
s
,
got
,
want
)
}
}
}
types/model/name.go
View file @
37f9c8ad
This diff is collapsed.
Click to expand it.
types/model/name_test.go
View file @
37f9c8ad
This diff is collapsed.
Click to expand it.
types/model/testdata/fuzz/Fuzz
ParseRef/82c2975c430ac608
→
types/model/testdata/fuzz/Fuzz
Name/d37463aa416f6bab
View file @
37f9c8ad
go test fuzz v1
go test fuzz v1
string("
:
")
string("
00@
")
types/model/testdata/fuzz/FuzzParseRef/1d43ee52085cb4aa
deleted
100644 → 0
View file @
2a80f55e
go test fuzz v1
string("/0")
types/model/testdata/fuzz/FuzzParseRef/27fd759314f0e6d6
deleted
100644 → 0
View file @
2a80f55e
go test fuzz v1
string("0//0")
types/model/testdata/fuzz/FuzzParseRef/3e3b70dba384074d
deleted
100644 → 0
View file @
2a80f55e
go test fuzz v1
string("0 /0")
types/model/testdata/fuzz/FuzzParseRef/71f1fdff711b6dab
deleted
100644 → 0
View file @
2a80f55e
go test fuzz v1
string("+0/00000")
types/model/testdata/fuzz/FuzzParseRef/b51b1c875e61a948
deleted
100644 → 0
View file @
2a80f55e
go test fuzz v1
string("0+.\xf2\x80\xf6\x9d00000\xe5\x99\xe6\xd900\xd90\xa60\x91\xdc0\xff\xbf\x99\xe800\xb9\xdc\xd6\xc300\x970\xfb\xfd0\xe0\x8a\xe1\xad\xd40\x9700\xa80\x980\xdd0000\xb00\x91000\xfe0\x89\x9b\x90\x93\x9f0\xe60\xf7\x84\xb0\x87\xa5\xff0\xa000\x9a\x85\xf6\x85\xfe\xa9\xf9\xe9\xde00\xf4\xe0\x8f\x81\xad\xde00\xd700\xaa\xe000000\xb1\xee0\x91")
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment