Lets 'ipfs add' add hidden files when explicit.

Fixes ipfs/go-ipfs/#2145. The --hidden switch (still) only affects
recursive adding.

License: MIT
Signed-off-by: Stephen Whitmore <noffle@ipfs.io>
This commit is contained in:
Stephen Whitmore 2016-01-14 08:32:17 -08:00
parent c242660da5
commit 0828d1eb64
3 changed files with 34 additions and 12 deletions

View File

@ -2,6 +2,7 @@ package commands
import (
"fmt"
"io"
"github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/cheggaaa/pb"
"github.com/ipfs/go-ipfs/core/coreunix"
@ -49,7 +50,7 @@ remains to be implemented.
cmds.BoolOption(trickleOptionName, "t", "Use trickle-dag format for dag generation"),
cmds.BoolOption(onlyHashOptionName, "n", "Only chunk and hash - do not write to disk"),
cmds.BoolOption(wrapOptionName, "w", "Wrap files with a directory object"),
cmds.BoolOption(hiddenOptionName, "H", "Include files that are hidden"),
cmds.BoolOption(hiddenOptionName, "H", "Include files that are hidden. Only takes effect on recursive add."),
cmds.StringOption(chunkerOptionName, "s", "chunking algorithm to use"),
cmds.BoolOption(pinOptionName, "Pin this object when adding. Default true"),
},
@ -147,8 +148,20 @@ remains to be implemented.
fileAdder.Silent = silent
addAllAndPin := func(f files.File) error {
if err := fileAdder.AddFile(f); err != nil {
return err
// Iterate over each top-level file and add individually. Otherwise the
// single files.File f is treated as a directory, affecting hidden file
// semantics.
for {
file, err := f.NextFile()
if err == io.EOF {
// Finished the list of files.
break
} else if err != nil {
return err
}
if err := fileAdder.AddFile(file); err != nil {
return err
}
}
if hash {

View File

@ -359,11 +359,7 @@ func (adder *Adder) addFile(file files.File) error {
return err
}
switch {
case files.IsHidden(file) && !adder.Hidden:
log.Infof("%s is hidden, skipping", file.FileName())
return &hiddenFileError{file.FileName()}
case file.IsDirectory():
if file.IsDirectory() {
return adder.addDir(file)
}
@ -417,11 +413,13 @@ func (adder *Adder) addDir(dir files.File) error {
break
}
err = adder.addFile(file)
if _, ok := err.(*hiddenFileError); ok {
// hidden file error, skip file
// Skip hidden files when adding recursively, unless Hidden is enabled.
if files.IsHidden(file) && !adder.Hidden {
log.Infof("%s is hidden, skipping", file.FileName())
continue
} else if err != nil {
}
err = adder.addFile(file)
if err != nil {
return err
}
}

View File

@ -48,6 +48,17 @@ test_add_skip() {
test_cmp expected actual
'
test_expect_success "'ipfs add' includes hidden files given explicitly even without --hidden" '
mkdir -p mountdir/dotfiles &&
echo "set nocompatible" > mountdir/dotfiles/.vimrc
cat >expected <<-\EOF &&
added QmT4uMRDCN7EMpFeqwvKkboszbqeW1kWVGrBxBuCGqZcQc .vimrc
EOF
ipfs add mountdir/dotfiles/.vimrc >actual
cat actual
test_cmp expected actual
'
}
# should work offline