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
}