Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-dms3
Commits
6bb02a59
Commit
6bb02a59
authored
Jan 08, 2019
by
Łukasz Magiera
Committed by
Steven Allen
Jan 17, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ls: option to report real file size
License: MIT Signed-off-by:
Łukasz Magiera
<
magik6k@gmail.com
>
parent
c8a2078e
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
83 additions
and
9 deletions
+83
-9
core/commands/ls.go
core/commands/ls.go
+17
-8
test/sharness/t0045-ls.sh
test/sharness/t0045-ls.sh
+66
-1
No files found.
core/commands/ls.go
View file @
6bb02a59
...
...
@@ -44,6 +44,7 @@ type LsOutput struct {
const
(
lsHeadersOptionNameTime
=
"headers"
lsResolveTypeOptionName
=
"resolve-type"
lsResolveSizeOptionName
=
"resolve-size"
lsStreamOptionName
=
"stream"
)
...
...
@@ -66,6 +67,7 @@ The JSON output contains type information.
Options
:
[]
cmdkit
.
Option
{
cmdkit
.
BoolOption
(
lsHeadersOptionNameTime
,
"v"
,
"Print table headers (Hash, Size, Name)."
),
cmdkit
.
BoolOption
(
lsResolveTypeOptionName
,
"Resolve linked objects to find out their types."
)
.
WithDefault
(
true
),
cmdkit
.
BoolOption
(
lsResolveSizeOptionName
,
"Resolve linked objects to find out their file size."
)
.
WithDefault
(
false
),
cmdkit
.
BoolOption
(
lsStreamOptionName
,
"s"
,
"Enable exprimental streaming of directory entries as they are traversed."
),
},
Run
:
func
(
req
*
cmds
.
Request
,
res
cmds
.
ResponseEmitter
,
env
cmds
.
Environment
)
error
{
...
...
@@ -79,9 +81,10 @@ The JSON output contains type information.
return
err
}
resolve
,
_
:=
req
.
Options
[
lsResolveTypeOptionName
]
.
(
bool
)
resolveType
,
_
:=
req
.
Options
[
lsResolveTypeOptionName
]
.
(
bool
)
resolveSize
,
_
:=
req
.
Options
[
lsResolveSizeOptionName
]
.
(
bool
)
dserv
:=
nd
.
DAG
if
!
resolve
{
if
!
resolve
Type
&&
!
resolveSize
{
offlineexch
:=
offline
.
Exchange
(
nd
.
Blockstore
)
bserv
:=
blockservice
.
New
(
nd
.
Blockstore
,
offlineexch
)
dserv
=
merkledag
.
NewDAGService
(
bserv
)
...
...
@@ -131,7 +134,7 @@ The JSON output contains type information.
}
outputLinks
:=
make
([]
LsLink
,
len
(
links
))
for
j
,
link
:=
range
links
{
lsLink
,
err
:=
makeLsLink
(
req
,
dserv
,
resolve
,
link
)
lsLink
,
err
:=
makeLsLink
(
req
,
dserv
,
resolve
Type
,
resolveSize
,
link
)
if
err
!=
nil
{
return
err
}
...
...
@@ -165,7 +168,7 @@ The JSON output contains type information.
return
linkResult
.
Err
}
link
:=
linkResult
.
Link
lsLink
,
err
:=
makeLsLink
(
req
,
dserv
,
resolve
,
link
)
lsLink
,
err
:=
makeLsLink
(
req
,
dserv
,
resolve
Type
,
resolveSize
,
link
)
if
err
!=
nil
{
return
err
}
...
...
@@ -224,8 +227,9 @@ func makeDagNodeLinkResults(req *cmds.Request, dagnode ipld.Node) <-chan unixfs.
return
linkResults
}
func
makeLsLink
(
req
*
cmds
.
Request
,
dserv
ipld
.
DAGService
,
resolve
bool
,
link
*
ipld
.
Link
)
(
*
LsLink
,
error
)
{
func
makeLsLink
(
req
*
cmds
.
Request
,
dserv
ipld
.
DAGService
,
resolve
Type
bool
,
resolveSize
bool
,
link
*
ipld
.
Link
)
(
*
LsLink
,
error
)
{
t
:=
unixfspb
.
Data_DataType
(
-
1
)
size
:=
link
.
Size
switch
link
.
Cid
.
Type
()
{
case
cid
.
Raw
:
...
...
@@ -233,7 +237,7 @@ func makeLsLink(req *cmds.Request, dserv ipld.DAGService, resolve bool, link *ip
t
=
unixfs
.
TFile
case
cid
.
DagProtobuf
:
linkNode
,
err
:=
link
.
GetNode
(
req
.
Context
,
dserv
)
if
err
==
ipld
.
ErrNotFound
&&
!
resolve
{
if
err
==
ipld
.
ErrNotFound
&&
!
resolve
Type
&&
!
resolveSize
{
// not an error
linkNode
=
nil
}
else
if
err
!=
nil
{
...
...
@@ -245,13 +249,18 @@ func makeLsLink(req *cmds.Request, dserv ipld.DAGService, resolve bool, link *ip
if
err
!=
nil
{
return
nil
,
err
}
t
=
d
.
Type
()
if
resolveType
{
t
=
d
.
Type
()
}
if
d
.
Type
()
==
unixfs
.
TFile
&&
resolveSize
{
size
=
d
.
FileSize
()
}
}
}
return
&
LsLink
{
Name
:
link
.
Name
,
Hash
:
link
.
Cid
.
String
(),
Size
:
link
.
S
ize
,
Size
:
s
ize
,
Type
:
t
,
},
nil
}
...
...
test/sharness/t0045-ls.sh
View file @
6bb02a59
...
...
@@ -61,6 +61,29 @@ EOF
test_cmp expected_ls actual_ls
'
test_expect_success
"'ipfs ls --resolve-size <three dir hashes>' succeeds"
'
ipfs ls --resolve-size QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss >actual_ls
'
test_expect_success
"'ipfs ls <three dir hashes>' output looks good"
'
cat <<-\EOF >expected_ls &&
QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj:
QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss 246 d1/
QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy 1143 d2/
QmeomffUNfmQy76CQGy9NdmqEnnHU9soCexBnGU3ezPHVH 5 f1
QmNtocSs7MoDkJMc1RkyisCSKvLadujPsfJfSdJ3e1eA1M 5 f2
QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy:
QmbQBUSRL9raZtNXfpTDeaxQapibJEG6qEY8WqAN22aUzd 1024 1024
QmaRGe7bVmVaLmxbrMiVNXqW4pRNNp3xq7hFtyRKA3mtJL 6 a
QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss:
QmQNd6ubRXaNG6Prov8o6vk3bn6eWsj9FxLGrAVDUAGkGe 128 128
QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN 6 a
EOF
test_cmp expected_ls actual_ls
'
test_expect_success
"'ipfs ls --headers <three dir hashes>' succeeds"
'
ipfs ls --headers QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss >actual_ls_headers
'
...
...
@@ -140,6 +163,29 @@ EOF
test_cmp expected_ls_stream actual_ls_stream
'
test_expect_success
"'ipfs ls --resolve-size --stream <three dir hashes>' succeeds"
'
ipfs ls --resolve-size --stream QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss >actual_ls_stream
'
test_expect_success
"'ipfs ls --stream <three dir hashes>' output looks good"
'
cat <<-\EOF >expected_ls_stream &&
QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj:
QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss 246 d1/
QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy 1143 d2/
QmeomffUNfmQy76CQGy9NdmqEnnHU9soCexBnGU3ezPHVH 5 f1
QmNtocSs7MoDkJMc1RkyisCSKvLadujPsfJfSdJ3e1eA1M 5 f2
QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy:
QmbQBUSRL9raZtNXfpTDeaxQapibJEG6qEY8WqAN22aUzd 1024 1024
QmaRGe7bVmVaLmxbrMiVNXqW4pRNNp3xq7hFtyRKA3mtJL 6 a
QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss:
QmQNd6ubRXaNG6Prov8o6vk3bn6eWsj9FxLGrAVDUAGkGe 128 128
QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN 6 a
EOF
test_cmp expected_ls_stream actual_ls_stream
'
test_expect_success
"'ipfs ls --stream --headers <three dir hashes>' succeeds"
'
ipfs ls --stream --headers QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss >actual_ls_stream_headers
'
...
...
@@ -172,7 +218,7 @@ test_ls_cmd_raw_leaves() {
mkdir -p somedir &&
echo bar > somedir/foo &&
ipfs add --raw-leaves -r somedir/ > /dev/null &&
ipfs ls QmThNTdtKaVoCVrYmM5EBS6U3S5vfKFue2TxbxxAxRcKKE > ls-actual
ipfs ls
'
$1
'
QmThNTdtKaVoCVrYmM5EBS6U3S5vfKFue2TxbxxAxRcKKE > ls-actual
echo "zb2rhf6GzX4ckKZtjy8yy8iyq1KttCrRyqDedD6xubhY3sw2F 4 foo" > ls-expect
test_cmp ls-actual ls-expect
'
...
...
@@ -187,12 +233,22 @@ test_ls_object() {
ipfs ls $HASH > ls-actual &&
test_cmp ls-actual ls-expect
'
test_expect_success
"ipfs add medium size file then 'ipfs ls --resolve-size' works as expected"
'
random 500000 2 > somefile &&
HASH=$(ipfs add somefile -q) &&
echo "QmPrM8S5T7Q3M8DQvQMS7m41m3Aq4jBjzAzvky5fH3xfr4 262144 " > ls-expect &&
echo "QmdaAntAzQqqVMo4B8V69nkQd5d918YjHXUe2oF6hr72ri 237856 " >> ls-expect &&
ipfs ls --resolve-size $HASH > ls-actual &&
test_cmp ls-actual ls-expect
'
}
# should work offline
test_ls_cmd
test_ls_cmd_streaming
test_ls_cmd_raw_leaves
test_ls_cmd_raw_leaves
--resolve-size
test_ls_object
# should work online
...
...
@@ -200,6 +256,7 @@ test_launch_ipfs_daemon
test_ls_cmd
test_ls_cmd_streaming
test_ls_cmd_raw_leaves
test_ls_cmd_raw_leaves
--resolve-size
test_kill_ipfs_daemon
test_ls_object
...
...
@@ -233,6 +290,10 @@ test_expect_success "'ipfs ls' fails" '
test_must_fail ipfs ls $DIR
'
test_expect_success
"'ipfs ls --resolve-type=false --resolve-size=true' fails"
'
test_must_fail ipfs ls --resolve-type=false --resolve-size=true $DIR
'
test_launch_ipfs_daemon
--offline
test_expect_success
"'ipfs ls --resolve-type=false' ok"
'
...
...
@@ -243,6 +304,10 @@ test_expect_success "'ipfs ls' fails" '
test_must_fail ipfs ls $DIR
'
test_expect_success
"'ipfs ls --resolve-type=false --resolve-size=true' fails"
'
test_must_fail ipfs ls --resolve-type=false --resolve-size=true $DIR
'
test_kill_ipfs_daemon
test_launch_ipfs_daemon
...
...
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