Commit Graph

4332 Commits

Author SHA1 Message Date
W. Trevor King
4acab79d66 core/commands/unixfs/ls: Explicitily record stat in LsObject
Instead of abusing a LsLink for non-directory objects [1].

[1]: https://github.com/ipfs/go-ipfs/pull/1348#discussion_r32680669

License: MIT
Signed-off-by: W. Trevor King <wking@tremily.us>
2015-06-20 13:34:47 -07:00
W. Trevor King
5fd4812b20 core/commands/unixfs/ls.go: Fix (and test) single-directory listing
We don't want to prefix these results with the argument.  If there was
only one argument, the unprefixed results are still explicit.

License: MIT
Signed-off-by: W. Trevor King <wking@tremily.us>
2015-06-20 13:34:47 -07:00
W. Trevor King
7fc2410d95 core/commands/unixfs/ls: Hash-map for Objects
Discussion with Juan on IRC ([1] through [2]) lead to this adjusted
JSON output.  Benefits over the old output include:

* deduplication (we only check the children of a given Merkle node
  once, even if multiple arguments resolve to that hash)

* alphabetized output (like POSIX's ls).  As a side-effect of this
  change, I'm also matching GNU Coreutils' ls output (maybe in POSIX?)
  by printing an alphabetized list of non-directories (one per line)
  first, with alphabetized directory lists afterwards.

[1]: https://botbot.me/freenode/ipfs/2015-06-12/?msg=41725570&page=5
[2]: https://botbot.me/freenode/ipfs/2015-06-12/?msg=41726547&page=5

License: MIT
Signed-off-by: W. Trevor King <wking@tremily.us>
2015-06-20 13:34:47 -07:00
W. Trevor King
ce0bf80368 core/commands/unixfs/ls: Replace TODO context with command context
Discussing this on IRC ([1] through [2]), Jeromy and I decided that
we'd really like a way to configure per-command [3] and per-action
timeouts, but until we have that we want to leave the minute limit
here.  We also decided that the use of TODO here instead of the
per-command req.Context().Context was a bug, which I'm fixing with
this commit.

[1]: https://botbot.me/freenode/ipfs/2015-06-12/?msg=41714126&page=4
[2]: https://botbot.me/freenode/ipfs/2015-06-12/?msg=41715618&page=4
[3]: https://github.com/ipfs/go-ipfs/issues/1325

License: MIT
Signed-off-by: W. Trevor King <wking@tremily.us>
2015-06-20 13:34:47 -07:00
W. Trevor King
f0a0ac1b83 core/commands/unixfs/ls: Use a stringified type name
This doesn't affect the text output, which was already using a
stringified name.  The earlier stringification does change the JSON
output from an enumeration integer (e.g. 2) to the string form
(e.g. "File").  If/when we transition to Merkle-object types named by
their hash, we will probably want to revisit this and pass both the
type hash and human-readable-but-collision-prone name on to clients.

License: MIT
Signed-off-by: W. Trevor King <wking@tremily.us>
2015-06-20 13:34:47 -07:00
W. Trevor King
c9733c5da7 core/commands/unixfs/ls: Set Argument in JSON output
Change the approach to the directory-header control so we can set the
Argument value in the JSON response.

Stripping the trailing newline from the JSON output is annoying, but
looking over [1] I saw no easy way to add a newline to the JSON
output.  And with the general framework that commands/ attempts to be,
it feels a bit funny to customize the JSON output for a command-line
program.  Perhaps a workable solution is to have the command-line
client append newlines to any output that otherwise lacks them?  But
that seems like a change best left to a separate series.

[1]: http://golang.org/pkg/encoding/json/

License: MIT
Signed-off-by: W. Trevor King <wking@tremily.us>
2015-06-20 13:34:44 -07:00
W. Trevor King
3e6905e8ba core/commands/unixfs: Rename 'ipfs unixfs' to 'ipfs file'
To be less confusing to newcomers (the IPFS filesystem isn't
Unix-specific anyway, and it isn't even very POSIX-specific [1,2,3]).
I'm a bit uncertain about having one name for users and another for
devs, but the consensus seems to be that mainaining two names is worth
the trouble [4].  We also kicked around:

* 'files' (plural),
* 'filesystem' (too long), and
* 'fs' (redundant after 'ipfs', even though IPFS isn't just about
  filesystems)

on IRC [5 through 6].  I wish there was a more evocative term.  I'm
never sure where "file" lands on the scale between "filesysytem",
"everything is a file", "a single chunk of data with an associated
inode".  But we can't think of anything better.

[1]: https://github.com/ipfs/go-ipfs/pull/1348#issuecomment-110529070
[2]: https://github.com/ipfs/go-ipfs/pull/1348#issuecomment-110529921
[3]: https://github.com/ipfs/go-ipfs/pull/1136/files#r29377283
  In my response to this (no longer visibile on GitHub):

  On Wed, Apr 29, 2015 at 01:30:04PM -0700, Juan Batiz-Benet wrote:
  > > +package fsnode
  >
  > i think this package should be called `unixfs` as that's the
  > abstraction that this is calling to.

  Will do, although I don't see what's especially Unix-y about these
  file nodes.

[4]: https://github.com/ipfs/go-ipfs/pull/1348#issuecomment-110529811
[5]: https://botbot.me/freenode/ipfs/2015-06-09/?msg=41428456&page=5
[6]: https://botbot.me/freenode/ipfs/2015-06-09/?msg=41430703&page=5

License: MIT
Signed-off-by: W. Trevor King <wking@tremily.us>
2015-06-13 13:07:13 -07:00
W. Trevor King
663f37cb99 core/commands/unixfs/ls: Don't recurse into chunked files
Folks operating at the Unix-filesystem level shouldn't care about that
level of Merkle-DAG detail.  Before this commit we had:

  $ ipfs unixfs ls /ipfs/QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4/busybox
  /ipfs/QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4/busybox:
  ... several lines of empty-string names ...

And with this commit we have:

  $ ipfs unixfs ls /ipfs/QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4/busybox
  /ipfs/QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4/busybox

I also reworked the argument-prefixing (object.Argument) in the output
marshaller to avoid redundancies like:

  $ ipfs unixfs ls /ipfs/QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4/busybox
  /ipfs/QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4/busybox:
  /ipfs/QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4/busybox

As a side-effect of this rework, we no longer have the trailing blank
line that we used to have after the final directory listing.

The new ErrImplementation is like Python's NotImplementedError, and is
mostly a way to guard against external changes that would need
associated updates in this code.  For example, once we see something
that's neither a file nor a directory, we'll have to update the switch
statement to handle those objects.

License: MIT
Signed-off-by: W. Trevor King <wking@tremily.us>
2015-06-13 13:06:34 -07:00
W. Trevor King
434871ba18 core/commands/unixfs: Add 'ipfs unixfs ls ...'
This is similar to 'ipfs ls ...', but it:

* Lists file sizes that match the content size:

    $ ipfs --encoding=json unixfs ls /ipfs/QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4
    {
      "Objects": [
        {
          "Argument": "/ipfs/QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4",
          "Links": [
            {
              "Name": "busybox",
              "Hash": "QmPbjmmci73roXf9VijpyQGgRJZthiQfnEetaMRGoGYV5a",
              "Size": 1947624,
              "Type": 2
            }
          ]
        }
      ]
    }
    $ ipfs cat /ipfs/QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4/busybox | wc -c
    1947624

  'ipfs ls ...', on the other hand, is using the Merkle-descendant
  size, which also includes fanout links and the typing information
  unixfs objects store in their Data:

    $ ipfs --encoding=json ls /ipfs/QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4
    {
      "Objects": [
        {
          "Hash": "/ipfs/QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4",
          "Links": [
            {
              "Name": "busybox",
              "Hash": "QmPbjmmci73roXf9VijpyQGgRJZthiQfnEetaMRGoGYV5a",
              "Size": 1948128,
              "Type": 2
            }
          ]
        }
      ]
    }

* Has a simpler text output corresponding to POSIX ls [1]:

    $ ipfs unixfs ls /ipfs/QmV2FrBtvue5ve7vxbAzKz3mTdWq8wfMNPwYd8d9KHksCF/gentoo/stage3/amd64/2015-04-02
    bin
    dev
    etc
    proc
    run
    sys
    $ ipfs ls /ipfs/QmV2FrBtvue5ve7vxbAzKz3mTdWq8wfMNPwYd8d9KHksCF/gentoo/stage3/amd64/2015-04-02
    QmSRCHG21Sbqm3EJG9aEBo4vS7Fqu86pAjqf99MyCdNxZ4 1948183 bin/
    QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn 4       dev/
    QmUz1Z5jnQEjwr78fiMk5babwjJBDmhN5sx5HvPiTGGGjM 1207    etc/
    QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn 4       proc/
    QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn 4       run/
    QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn 4       sys/

  The minimal output allows us to start off with POSIX compliance and
  then add options (which may or may not be POSIX compatible) to
  adjust the output format as we get a better feel for what we need
  ([2] through [3]).

[1]: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html
[2]: https://botbot.me/freenode/ipfs/2015-06-12/?msg=41724727&page=5
[3]: https://botbot.me/freenode/ipfs/2015-06-12/?msg=41725146&page=5

License: MIT
Signed-off-by: W. Trevor King <wking@tremily.us>
2015-06-13 12:44:26 -07:00
Juan Batiz-Benet
848502de1b Merge pull request #1367 from ipfs/wantmanager-cleanup
select with context when sending on channels
2015-06-12 15:14:09 -07:00
Jeromy
b12cc09f64 select with context when sending on channels
License: MIT
Signed-off-by: Jeromy <jeromyj@gmail.com>
2015-06-12 11:32:06 -07:00
Juan Batiz-Benet
41785f3b59 Merge pull request #1356 from ipfs/fix/bitswap-leak
prevent wantmanager from leaking goroutines (and memory)
2015-06-11 20:39:08 -07:00
Jeromy
952dc9c60f go-ipfs version 0.3.5
License: MIT
Signed-off-by: Jeromy <jeromyj@gmail.com>
2015-06-11 20:32:30 -07:00
Jeromy
e014a66bf5 comments from CR
License: MIT
Signed-off-by: Jeromy <jeromyj@gmail.com>
2015-06-11 16:43:21 -07:00
Jeromy
c5b40b3b02 prevent wantmanager from leaking goroutines (and memory)
License: MIT
Signed-off-by: Jeromy <jeromyj@gmail.com>
2015-06-11 09:38:09 -07:00
Juan Batiz-Benet
feba3e1da5 Merge pull request #1334 from ipfs/patch/patch
'key' objects dont marshal to json well
2015-06-08 13:36:11 -07:00
Jeromy
c214210354 add some basic testing for object patch 2015-06-08 10:19:26 -07:00
Jeromy
b4f55d337a 'key' objects dont marshal to json well 2015-06-08 10:19:26 -07:00
Juan Batiz-Benet
217fe2687c Merge pull request #1287 from ipfs/feat/httpApiTcpPort0
httpGw: make /tcp/0 work
2015-06-08 03:46:35 -07:00
Henry
4b337bb7e8 daemon: addressed CR comments 2015-06-08 11:08:10 +02:00
Henry
07b3415cdb http endpoints: dont print before listen
also splits api, gw and fuse bring up into helper functions
2015-06-08 10:56:05 +02:00
Juan Batiz-Benet
aad700bd6d Merge pull request #1342 from ipfs/observe-addr-twice
Better symmetric NAT avoidance.
2015-06-07 18:14:52 -07:00
Juan Batiz-Benet
500bb51759 p2p/net/identify: clump addr observers into groups
Different mutliaddrs is not enough. Nodes may share transports.
NAT port mappings will likely only work on the base IP/TCP port
pair. We go one step further, and require different root (IP)
addrs. Just in case some NATs group by IP. In practice, this is
what we want: use addresses only if hosts that are on different
parts of the network have seen this address.
2015-06-07 17:00:56 -07:00
Juan Batiz-Benet
96ed20bffe p2p/protocol/identify: dont double count observers
If the same peer observed the same address twice, it would be
double counted as different observations. This change adds a map
to make sure we're counting each observer once.

This is easily extended to require more than two observations,
but i have not yet encountered NATs for whom this is relevant.
2015-06-07 16:48:02 -07:00
Juan Batiz-Benet
39716077b4 Merge pull request #1341 from ipfs/use-go-sleep
Use github.com/chriscool/go-sleep
2015-06-07 03:58:53 -07:00
Christian Couder
14a3315dc7 sharness/test-lib: use go-sleep to sleep
License: MIT
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
2015-06-07 10:29:08 +02:00
Christian Couder
fd449af227 test/Makefile: build go-sleep
License: MIT
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
2015-06-07 10:28:13 +02:00
Juan Batiz-Benet
268894c85f Merge pull request #1340 from harlantwood/patch-1
fix typo
2015-06-06 21:31:15 -07:00
Juan Batiz-Benet
553960d413 Merge pull request #1339 from ipfs/update-cheggaaa-pb
Godeps: update cheggaaa/pb to the latest version
2015-06-06 16:35:49 -07:00
Christian Couder
d4e0ad97df Vendor github.com/chriscool/go-sleep
License: MIT
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
2015-06-06 23:07:21 +02:00
Harlan T Wood
e82e5cd87e fix typo 2015-06-06 13:42:54 -07:00
Christian Couder
24de361001 Godeps: update cheggaaa/pb to the latest version
License: MIT
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
2015-06-05 23:48:17 +02:00
Juan Batiz-Benet
13cd226bff Merge pull request #1317 from ipfs/builder-default
make the default repo for corebuilder work
2015-06-03 16:30:02 -07:00
Jeromy
6b16981979 make the default repo for corebuilder work 2015-06-03 16:06:15 -07:00
Juan Batiz-Benet
6cff7e87f6 Merge pull request #1299 from ipfs/feat/patch
implement patch command
2015-06-03 15:56:00 -07:00
Jeromy
40e423d6dc implement an ipfs patch command for modifying merkledag objects
WIP: object creator command

better docs

move patch command into object namespace

dont ignore cancel funcs

addressing comment from CR

add two new subcommands to object patch and clean up main Run func

cancel contexts in early returns

switch to util.Key
2015-06-03 15:24:07 -07:00
Juan Batiz-Benet
0494a4db2c Merge pull request #1327 from rht/cleanup-rand
Swap all 'crypto/rand' rng in tests with 'math/rand'
2015-06-03 15:11:25 -07:00
Juan Batiz-Benet
0397bdf5d3 Merge pull request #1329 from ipfs/implement-test-seq
ipfs-test-lib: implement test_seq()
2015-06-03 15:10:54 -07:00
Juan Batiz-Benet
238fac5488 Merge pull request #1330 from ipfs/fix/test-deps
fix up some dependencies to avoid circular record deps
2015-06-03 15:10:16 -07:00
Christian Couder
59cac0a161 test-lib: use test_seq()
License: MIT
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
2015-06-03 23:53:24 +02:00
Christian Couder
3c2e0ba586 ipfs-test-lib: implement test_seq()
License: MIT
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
2015-06-03 23:51:50 +02:00
Jeromy
c2b7456b49 fix up some dependencies to avoid circular record deps 2015-06-03 14:27:31 -07:00
Juan Batiz-Benet
898863d632 Merge pull request #1323 from ipfs/revert-godeps-update
Revert "godeps: update everything to master"
2015-06-03 14:26:16 -07:00
Jeromy
db98e77de9 add a test for issue repro 2015-06-03 08:41:25 -07:00
rht
f239a38fbb golint on core/commands 2015-06-03 18:44:28 +07:00
rht
e671ab2f42 Swap all 'crypto/rand' rng in tests with 'math/rand' 2015-06-03 18:12:34 +07:00
Juan Batiz-Benet
18297e2dc9 Merge pull request #1326 from rht/master
Test repeat in 10 sec: increase check frequency tenfold
2015-06-03 03:30:17 -07:00
rht
c14ab9bd51 go vet on core/commands 2015-06-03 17:20:40 +07:00
rht
9bdc1d6060 Test repeat in 10 sec: increase check frequency tenfold 2015-06-03 16:49:03 +07:00
Jeromy
546415b174 Revert "godeps: update everything to master"
This reverts commit dc758b1c81.
2015-06-02 14:55:32 -07:00