@cryptotaxi247 / kubo / commits / 01b61d763

unixfs add: Changes for fixed wrap logic

This commit was moved from ipfs/interface-go-ipfs-core@e87318a2c3620d2402517a6833e21749c065a397 This commit was moved from ipfs/boxo@1ec848f9a24d9c67927520cedcce7c2393893b9a

Łukasz Magiera committed Feb 25, 2019 at 17:10 UTC 01b61d76346799d4f762b7527466871aa6ad66d7
2 files changed +80 -47
core/coreiface/options/unixfs.go
+11
@@ -35,6 +35,7 @@ type UnixfsAddSettings struct {
35
36 Wrap bool
37 Hidden bool
38 + TopHidden bool
39 StdinName string
40
41 Events chan<- interface{}
@@ -69,6 +70,7 @@ func UnixfsAddOptions(opts ...UnixfsAddOption) (*UnixfsAddSettings, cid.Prefix,
70
71 Wrap: false,
72 Hidden: false,
73 + TopHidden: false,
74 StdinName: "",
75
76 Events: nil,
@@ -255,6 +257,15 @@ func (unixfsOpts) Hidden(hidden bool) UnixfsAddOption {
257 }
258 }
259
260 +// TopHidden enables adding of hidden files in top-level directory (files
261 +// prefixed with '.')
262 +func (unixfsOpts) TopHidden(hidden bool) UnixfsAddOption {
263 + return func(settings *UnixfsAddSettings) error {
264 + settings.TopHidden = hidden
265 + return nil
266 + }
267 +}
268 +
269 // StdinName is the name set for files which don specify FilePath as
270 // os.Stdin.Name()
271 func (unixfsOpts) StdinName(name string) UnixfsAddOption {
core/coreiface/tests/unixfs.go
+69 -47
@@ -82,11 +82,14 @@ func flatDir() files.Node {
82 })
83 }
84
85 -func wrapped(name string) func(f files.Node) files.Node {
85 +func wrapped(names ...string) func(f files.Node) files.Node {
86 return func(f files.Node) files.Node {
87 - return files.NewMapDirectory(map[string]files.Node{
88 - name: f,
89 - })
87 + for i := range names {
88 + f = files.NewMapDirectory(map[string]files.Node{
89 + names[len(names)-i-1]: f,
90 + })
91 + }
92 + return f
93 }
94 }
95
@@ -241,16 +244,30 @@ func (tp *provider) TestAdd(t *testing.T) {
244 },
245 // multi file
246 {
244 - name: "simpleDir",
247 + name: "simpleDirNoWrap",
248 data: flatDir,
246 - wrap: "t",
249 path: "/ipfs/QmRKGpFfR32FVXdvJiHfo4WJ5TDYBsM1P9raAp1p6APWSp",
250 },
251 {
250 - name: "twoLevelDir",
251 - data: twoLevelDir(),
252 - wrap: "t",
253 - path: "/ipfs/QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr",
252 + name: "simpleDirWrap",
253 + data: flatDir,
254 + expect: wrapped("QmRKGpFfR32FVXdvJiHfo4WJ5TDYBsM1P9raAp1p6APWSp"),
255 + path: "/ipfs/QmXxCaQkC8Z6Qws1nTkTQfCsL9y4XvWXnrPokp9bhmjC1L",
256 + opts: []options.UnixfsAddOption{options.Unixfs.Wrap(true)},
257 + },
258 + {
259 + name: "simpleDir",
260 + data: flatDir,
261 + wrap: "t",
262 + expect: wrapped("t"),
263 + path: "/ipfs/Qmc3nGXm1HtUVCmnXLQHvWcNwfdZGpfg2SRm1CxLf7Q2Rm",
264 + },
265 + {
266 + name: "twoLevelDir",
267 + data: twoLevelDir(),
268 + wrap: "t",
269 + expect: wrapped("t"),
270 + path: "/ipfs/QmPwsL3T5sWhDmmAWZHAzyjKtMVDS9a11aHNRqb3xoVnmg",
271 },
272 // wrapped
273 {
@@ -261,15 +278,6 @@ func (tp *provider) TestAdd(t *testing.T) {
278 },
279 wrap: "foo",
280 expect: wrapped("foo"),
264 - opts: []options.UnixfsAddOption{options.Unixfs.Wrap(true)},
265 - },
266 - {
267 - name: "addNotWrappedDirFile",
268 - path: hello,
269 - data: func() files.Node {
270 - return files.NewBytesFile([]byte(helloStr))
271 - },
272 - wrap: "foo",
281 },
282 {
283 name: "stdinWrapped",
@@ -306,16 +314,16 @@ func (tp *provider) TestAdd(t *testing.T) {
314 name: "twoLevelDirWrapped",
315 data: twoLevelDir(),
316 wrap: "t",
309 - expect: wrapped("t"),
310 - path: "/ipfs/QmPwsL3T5sWhDmmAWZHAzyjKtMVDS9a11aHNRqb3xoVnmg",
317 + expect: wrapped("QmPwsL3T5sWhDmmAWZHAzyjKtMVDS9a11aHNRqb3xoVnmg", "t"),
318 + path: "/ipfs/QmXzZwAh34pmNjuKsVGZfpbByis5S5qeZjCCUxa1ajZqzH",
319 opts: []options.UnixfsAddOption{options.Unixfs.Wrap(true)},
320 },
321 {
322 name: "twoLevelInlineHash",
323 data: twoLevelDir(),
324 wrap: "t",
317 - expect: wrapped("t"),
318 - path: "/ipfs/zBunoruKoyCHKkALNSWxDvj4L7yuQnMgQ4hUa9j1Z64tVcDEcu6Zdetyu7eeFCxMPfxb7YJvHeFHoFoHMkBUQf6vfdhmi",
325 + expect: wrapped("zBunoruKoyCHKkALNSWxDvj4L7yuQnMgQ4hUa9j1Z64tVcDEcu6Zdetyu7eeFCxMPfxb7YJvHeFHoFoHMkBUQf6vfdhmi", "t"),
326 + path: "/ipfs/QmUX6GykDGHTMtLmDkfjqs48QwQK82vou51xwaY9TSU7Zo",
327 opts: []options.UnixfsAddOption{options.Unixfs.Wrap(true), options.Unixfs.Inline(true), options.Unixfs.RawLeaves(true), options.Unixfs.Hash(mh.SHA3)},
328 },
329 // hidden
@@ -328,17 +336,20 @@ func (tp *provider) TestAdd(t *testing.T) {
336 "foo": files.NewBytesFile([]byte("hello1")),
337 })
338 },
331 - wrap: "t",
332 - path: "/ipfs/QmehGvpf2hY196MzDFmjL8Wy27S4jbgGDUAhBJyvXAwr3g",
333 - opts: []options.UnixfsAddOption{options.Unixfs.Hidden(true)},
339 + wrap: "t",
340 + expect: wrapped("t"),
341 + path: "/ipfs/QmPXLSBX382vJDLrGakcbrZDkU3grfkjMox7EgSC9KFbtQ",
342 + opts: []options.UnixfsAddOption{options.Unixfs.Hidden(true)},
343 },
344 {
336 - name: "hiddenFileAlwaysAdded",
345 + name: "topHiddenFileAdded",
346 data: func() files.Node {
347 return files.NewBytesFile([]byte(helloStr))
348 },
340 - wrap: ".foo",
341 - path: hello,
349 + wrap: ".foo",
350 + expect: wrapped(".foo"),
351 + path: "/ipfs/QmciAVG3krCbvzUaK9gr6jUgfEjQtYmuuXi1n67teQ4Ni2",
352 + opts: []options.UnixfsAddOption{options.Unixfs.TopHidden(true)},
353 },
354 {
355 name: "hiddenFilesNotAdded",
@@ -352,10 +363,25 @@ func (tp *provider) TestAdd(t *testing.T) {
363 expect: func(files.Node) files.Node {
364 return flatDir()
365 },
355 - wrap: "t",
366 path: "/ipfs/QmRKGpFfR32FVXdvJiHfo4WJ5TDYBsM1P9raAp1p6APWSp",
367 opts: []options.UnixfsAddOption{options.Unixfs.Hidden(false)},
368 },
369 + {
370 + name: "hiddenFilesWrappedNotAdded",
371 + data: func() files.Node {
372 + return files.NewMapDirectory(map[string]files.Node{
373 + ".bar": files.NewBytesFile([]byte("hello2")),
374 + "bar": files.NewBytesFile([]byte("hello2")),
375 + "foo": files.NewBytesFile([]byte("hello1")),
376 + })
377 + },
378 + expect: func(files.Node) files.Node {
379 + return wrapped("t")(flatDir())
380 + },
381 + wrap: "t",
382 + path: "/ipfs/Qmc3nGXm1HtUVCmnXLQHvWcNwfdZGpfg2SRm1CxLf7Q2Rm",
383 + opts: []options.UnixfsAddOption{options.Unixfs.Hidden(false)},
384 + },
385 // NoCopy
386 {
387 name: "simpleNoCopy",
@@ -392,10 +418,9 @@ func (tp *provider) TestAdd(t *testing.T) {
418 data: twoLevelDir(),
419 path: "/ipfs/QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr",
420 events: []coreiface.AddEvent{
395 - {Name: "t/abc", Path: p("QmU7nuGs2djqK99UNsNgEPGh6GV4662p6WtsgccBNGTDxt"), Size: "62"},
396 - {Name: "t", Path: p("QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr"), Size: "229"},
421 + {Name: "abc", Path: p("QmU7nuGs2djqK99UNsNgEPGh6GV4662p6WtsgccBNGTDxt"), Size: "62"},
422 + {Name: "", Path: p("QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr"), Size: "229"},
423 },
398 - wrap: "t",
424 opts: []options.UnixfsAddOption{options.Unixfs.Silent(true)},
425 },
426 {
@@ -403,13 +428,12 @@ func (tp *provider) TestAdd(t *testing.T) {
428 data: twoLevelDir(),
429 path: "/ipfs/QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr",
430 events: []coreiface.AddEvent{
406 - {Name: "t/abc/def", Path: p("QmNyJpQkU1cEkBwMDhDNFstr42q55mqG5GE5Mgwug4xyGk"), Size: "13"},
407 - {Name: "t/bar", Path: p("QmS21GuXiRMvJKHos4ZkEmQDmRBqRaF5tQS2CQCu2ne9sY"), Size: "14"},
408 - {Name: "t/foo", Path: p("QmfAjGiVpTN56TXi6SBQtstit5BEw3sijKj1Qkxn6EXKzJ"), Size: "14"},
409 - {Name: "t/abc", Path: p("QmU7nuGs2djqK99UNsNgEPGh6GV4662p6WtsgccBNGTDxt"), Size: "62"},
410 - {Name: "t", Path: p("QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr"), Size: "229"},
431 + {Name: "abc/def", Path: p("QmNyJpQkU1cEkBwMDhDNFstr42q55mqG5GE5Mgwug4xyGk"), Size: "13"},
432 + {Name: "bar", Path: p("QmS21GuXiRMvJKHos4ZkEmQDmRBqRaF5tQS2CQCu2ne9sY"), Size: "14"},
433 + {Name: "foo", Path: p("QmfAjGiVpTN56TXi6SBQtstit5BEw3sijKj1Qkxn6EXKzJ"), Size: "14"},
434 + {Name: "abc", Path: p("QmU7nuGs2djqK99UNsNgEPGh6GV4662p6WtsgccBNGTDxt"), Size: "62"},
435 + {Name: "", Path: p("QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr"), Size: "229"},
436 },
412 - wrap: "t",
437 },
438 {
439 name: "progress1M",
@@ -528,14 +552,14 @@ func (tp *provider) TestAdd(t *testing.T) {
552 _, origDir := orig.(files.Directory)
553 _, gotDir := got.(files.Directory)
554
531 - if origDir != gotDir {
532 - t.Fatal("file type mismatch")
533 - }
534 -
555 if origName != gotName {
556 t.Errorf("file name mismatch, orig='%s', got='%s'", origName, gotName)
557 }
558
559 + if origDir != gotDir {
560 + t.Fatalf("file type mismatch on %s", origName)
561 + }
562 +
563 if !gotDir {
564 defer orig.Close()
565 defer got.Close()
@@ -804,9 +828,7 @@ func (tp *provider) TestEntriesExpired(t *testing.T) {
828
829 r := strings.NewReader("content-of-file")
830 p, err := api.Unixfs().Add(ctx, files.NewMapDirectory(map[string]files.Node{
807 - "0": files.NewMapDirectory(map[string]files.Node{
808 - "name-of-file": files.NewReaderFile(r),
809 - }),
831 + "name-of-file": files.NewReaderFile(r),
832 }))
833 if err != nil {
834 t.Error(err)
@@ -846,7 +868,7 @@ func (tp *provider) TestLsEmptyDir(t *testing.T) {
868 t.Error(err)
869 }
870
849 - _, err = api.Unixfs().Add(ctx, files.NewMapDirectory(map[string]files.Node{"0": files.NewSliceDirectory([]files.DirEntry{})}))
871 + _, err = api.Unixfs().Add(ctx, files.NewSliceDirectory([]files.DirEntry{}))
872 if err != nil {
873 t.Error(err)
874 }