@@ -52,7 +52,7 @@ fn main() {
52
52
}
53
53
54
54
fn walk ( blocks : ShardedBlockStore , start : & Cid ) -> Result < ( ) , Error > {
55
- use ipfs_unixfs:: walk:: { ContinuedWalk , Walker } ;
55
+ use ipfs_unixfs:: walk:: { ContinuedWalk , Entry , MetadataEntry , Walker } ;
56
56
57
57
let mut buf = Vec :: new ( ) ;
58
58
let mut cache = None ;
@@ -72,56 +72,45 @@ fn walk(blocks: ShardedBlockStore, start: &Cid) -> Result<(), Error> {
72
72
// items.
73
73
visit = match walker. continue_walk ( & buf, & mut cache) ? {
74
74
ContinuedWalk :: File ( segment, item) => {
75
- let entry = item. as_entry ( ) ;
76
- let total_size = entry. total_file_size ( ) . expect ( "all files have total size" ) ;
77
- // metadata is picked up from the root file and carried until the last block
78
- let metadata = entry. metadata ( ) . expect ( "all files have metadata" ) ;
79
-
80
- if segment. is_first ( ) {
81
- // this is set on the root block, no actual bytes are present for multiblock
82
- // files
75
+ if let Entry :: Metadata ( MetadataEntry :: File ( .., path, md, size) ) = item. as_entry ( ) {
76
+ if segment. is_first ( ) {
77
+ // this is set on the root block, no actual bytes are present for multiblock
78
+ // files
79
+ }
80
+
81
+ if segment. is_last ( ) {
82
+ let mode = md. mode ( ) . unwrap_or ( 0o0644 ) & 0o7777 ;
83
+ let ( seconds, _) = md. mtime ( ) . unwrap_or ( ( 0 , 0 ) ) ;
84
+ println ! ( "f {:o} {:>12} {:>16} {:?}" , mode, seconds, size, path) ;
85
+ }
83
86
}
84
-
85
- if segment. is_last ( ) {
86
- let path = entry. path ( ) ;
87
- let mode = metadata. mode ( ) . unwrap_or ( 0o0644 ) & 0o7777 ;
88
- let ( seconds, _) = metadata. mtime ( ) . unwrap_or ( ( 0 , 0 ) ) ;
89
-
90
- println ! ( "f {:o} {:>12} {:>16} {:?}" , mode, seconds, total_size, path) ;
91
- }
92
-
93
- // continue the walk
94
87
item. into_inner ( )
95
88
}
96
89
ContinuedWalk :: Directory ( item) => {
97
90
// presense of metadata can be used to determine if this is the first apperiance of
98
91
// a directory by looking at the metadata: sibling hamt shard buckets do not have
99
92
// metadata.
100
- if let Some ( metadata) = item. as_entry ( ) . metadata ( ) {
93
+ if let Entry :: Metadata ( metadata_entry) = item. as_entry ( ) {
94
+ let metadata = metadata_entry. metadata ( ) ;
101
95
let path = item. as_entry ( ) . path ( ) ;
102
-
103
96
let mode = metadata. mode ( ) . unwrap_or ( 0o0755 ) & 0o7777 ;
104
97
let ( seconds, _) = metadata. mtime ( ) . unwrap_or ( ( 0 , 0 ) ) ;
105
-
106
98
println ! ( "d {:o} {:>12} {:>16} {:?}" , mode, seconds, "-" , path) ;
107
99
}
108
-
109
100
item. into_inner ( )
110
101
}
111
102
ContinuedWalk :: Symlink ( bytes, item) => {
112
- let entry = item. as_entry ( ) ;
113
- let metadata = entry. metadata ( ) . expect ( "symlink must have metadata" ) ;
114
-
115
- let path = entry. path ( ) ;
116
- let target = Path :: new ( std:: str:: from_utf8 ( bytes) . unwrap ( ) ) ;
117
- let mode = metadata. mode ( ) . unwrap_or ( 0o0755 ) & 0o7777 ;
118
- let ( seconds, _) = metadata. mtime ( ) . unwrap_or ( ( 0 , 0 ) ) ;
119
-
120
- println ! (
121
- "s {:o} {:>12} {:>16} {:?} -> {:?}" ,
122
- mode, seconds, "-" , path, target
123
- ) ;
124
-
103
+ if let Entry :: Metadata ( metadata_entry) = item. as_entry ( ) {
104
+ let metadata = metadata_entry. metadata ( ) ;
105
+ let path = metadata_entry. path ( ) ;
106
+ let target = Path :: new ( std:: str:: from_utf8 ( bytes) . unwrap ( ) ) ;
107
+ let mode = metadata. mode ( ) . unwrap_or ( 0o0755 ) & 0o7777 ;
108
+ let ( seconds, _) = metadata. mtime ( ) . unwrap_or ( ( 0 , 0 ) ) ;
109
+ println ! (
110
+ "s {:o} {:>12} {:>16} {:?} -> {:?}" ,
111
+ mode, seconds, "-" , path, target
112
+ ) ;
113
+ }
125
114
item. into_inner ( )
126
115
}
127
116
} ;
0 commit comments