Re: [9fans] Git/fs: Possibly Usable

2019-04-03 Thread Ori Bernstein
On Wed, 3 Apr 2019 13:23:08 -0700
Ori Bernstein  wrote:

>   - I can remove the libavl usage, possibly replacing with
> the objset implementation I already have.

Did this one. Turned out to save a couple of lines, in the end.

-- 
Ori Bernstein 



Re: [9fans] Git/fs: Possibly Usable

2019-04-03 Thread Kurt H Maier
On Wed, Apr 03, 2019 at 05:00:15PM -0700, Skip Tavakkolian wrote:
> 9front maintainers, can anyone speak to technical reasons for creating a
> new version rather than fixing existing? Also, any thoughts on changing the
> name slightly so they can both be on the same system? maybe libAVL?

In 2016 spew wrote libbst, which is a binary search tree library that
supports both AVL and left-leaning red-black tree.  While he was at it
he wrote a faster and simpler avl implementation, and fixed venti and
nupas to work with it.  Since those were the only two things in the tree
that used AVL, nobody really cared if the old implementation went away.

I'm not sure what the advantage is to reintroducing it to 9front (aside
from the desire for zen-garden reliquaries).  The programs that use the
old API can be counted on one hand and fixing them is not difficult.

The question was raised, at the time, if the old one might have been
hand-tuned for some venti-related performance characteristics, but I
don't think anyone followed through on measuring the difference.  If
there are such idiosyncracies in the old code, they were not documented.

khm



Re: [9fans] Git/fs: Possibly Usable

2019-04-03 Thread Skip Tavakkolian
I now realize there are two different libavl's.  It's easy enough to copy
from 9front repo (hopefully there are no cascading dependencies).

9front maintainers, can anyone speak to technical reasons for creating a
new version rather than fixing existing? Also, any thoughts on changing the
name slightly so they can both be on the same system? maybe libAVL?

Thanks,
-Skip

On Wed, Apr 3, 2019 at 1:23 PM Ori Bernstein  wrote:

> On Wed, 3 Apr 2019 11:29:30 -0700
> Skip Tavakkolian  wrote:
>
> > Hi,
> >
> > The avl library doesn't match up to 9legacy version. Any ideas?
>
> Looking at a few options. I can just say "well, patch it", but it'd
> be nice to see the various plan9s playing better with each other.
>
> There are a few options. The easy ones:
>
> - I can bundle the 9front libavl in git9.
> - I can remove the libavl usage, possibly replacing with
>   the objset implementation I already have.
>
> The harder ones:
>
> - 9front can provide compatibility with 9legacy libavl
> - 9legacy can adopt the 9front libavl API.
>
> The first two are easy. The other two involve herding cats,
> but would make it possible for more code to be shared. Given
> how few people are actually writing code on plan 9, it would
> be nice to share what is there.
>
> Right now, I'm leaning towards the second option, because all
> I really use libavl for is a key-value lookup.
>
> > BTW, I think your notes on this message are a great start for a README.
>
> Already done.
>
> --
> Ori Bernstein 
>


Re: [9fans] Git/fs: Possibly Usable

2019-04-03 Thread Ori Bernstein
On Wed, 3 Apr 2019 11:29:30 -0700
Skip Tavakkolian  wrote:

> Hi,
> 
> The avl library doesn't match up to 9legacy version. Any ideas?

Looking at a few options. I can just say "well, patch it", but it'd
be nice to see the various plan9s playing better with each other.

There are a few options. The easy ones:

- I can bundle the 9front libavl in git9.
- I can remove the libavl usage, possibly replacing with
  the objset implementation I already have.

The harder ones:

- 9front can provide compatibility with 9legacy libavl
- 9legacy can adopt the 9front libavl API.

The first two are easy. The other two involve herding cats,
but would make it possible for more code to be shared. Given
how few people are actually writing code on plan 9, it would
be nice to share what is there.

Right now, I'm leaning towards the second option, because all
I really use libavl for is a key-value lookup.
 
> BTW, I think your notes on this message are a great start for a README.
 
Already done.

-- 
Ori Bernstein 



Re: [9fans] Git/fs: Possibly Usable

2019-04-03 Thread David du Colombier
> The avl library doesn't match up to 9legacy version. Any ideas?
> 
> BTW, I think your notes on this message are a great start for a README.

git9 seems to use 9front's libavl, which is a rewrite of Plan 9's libavl.
9legacy uses the original Plan9's libavl.

Please try this patch: http://9legacy.org/9legacy/patch/git9-avl.diff

-- 
David du Colombier



Re: [9fans] Fw: Git/fs: Possibly Usable

2019-04-03 Thread Cull


>From: hiro
>Sent: Wednesday, April 3, 2019 12:22 PM
>To: Fans of the OS Plan 9 from Bell Labs
>
>no

Can you elaborate? 

Cull‎



Re: [9fans] Fw: Git/fs: Possibly Usable

2019-04-03 Thread hiro
no

On 4/3/19, Cull  wrote:
>>Sent: Wednesday, April 3, 2019 10:08 AM
>>>On April 3, 2019 4:02:49 PM UTC, o...@eigenstate.org wrote:
>>>Don't particularly care. At some point I'd like to commit it to 9front,
>>>but I can relicense it then.
>>>
>>>Do you have a preference?
>>‎
>>Probably MIT or a BSD.
>>
>>But I can also live with any copyleft of your choice.
>
> Wouldn't BSD (2 clause) be the easiest to reliscence down the road?
>
>
>



[9fans] Fw: Fw: Git/fs: Possibly Usable

2019-04-03 Thread Cull
>From: Kurt H Maier
>Sent: Wednesday, April 3, 2019 11:59 AM
>To: Fans of the OS Plan 9 from Bell Labs
>
>The copyright holder can relicense at will.
I guess I was thinking moreso if, for some reason, the author didn't (i.e. went 
MIA or was just lazy).

Cull
‎



Re: [9fans] Fw: Git/fs: Possibly Usable

2019-04-03 Thread Cull


>From: Kurt H Maier
>Sent: Wednesday, April 3, 2019 11:59 AM
>To: Fans of the OS Plan 9 from Bell Labs
>
>The copyright holder can relicense at will.
I guess I was thinking moreso if, for some reason, the author didn't (i.e. went 
MIA or was just lazy).

Cull




Re: [9fans] Fw: Git/fs: Possibly Usable

2019-04-03 Thread Kurt H Maier
On Wed, Apr 03, 2019 at 11:43:55AM -0700, Cull wrote:
> 
> Wouldn't BSD (2 clause) be the easiest to reliscence down the road?
> 

The copyright holder can relicense at will.

khm



Re: [9fans] Git/fs: Possibly Usable

2019-04-03 Thread Ori Bernstein
On Wed, 03 Apr 2019 16:59:22 +
Giacomo  wrote:

> On April 3, 2019 4:02:49 PM UTC, o...@eigenstate.org wrote:
> >Don't particularly care. At some point I'd like to commit it to 9front,
> >but I can relicense it then.
> >
> >Do you have a preference?
> 
> Probably MIT or a BSD.
> 
> But I can also live with any copyleft of your choice.
> 
> 
> Giacomo
> 

MIT it is, since it matches the 9front license.

-- 
Ori Bernstein 



[9fans] Fw: Git/fs: Possibly Usable

2019-04-03 Thread Cull
>Sent: Wednesday, April 3, 2019 10:08 AM
>>On April 3, 2019 4:02:49 PM UTC, o...@eigenstate.org wrote:
>>Don't particularly care. At some point I'd like to commit it to 9front,
>>but I can relicense it then.
>>
>>Do you have a preference?
>‎
>Probably MIT or a BSD.
>
>But I can also live with any copyleft of your choice.

Wouldn't BSD (2 clause) be the easiest to reliscence down the road?




Re: [9fans] Git/fs: Possibly Usable

2019-04-03 Thread Cull


>Sent: Wednesday, April 3, 2019 10:08 AM
>>On April 3, 2019 4:02:49 PM UTC, o...@eigenstate.org wrote:
>>Don't particularly care. At some point I'd like to commit it to 9front,
>>but I can relicense it then.
>>
>>Do you have a preference?
>‎
>Probably MIT or a BSD.
>
>But I can also live with any copyleft of your choice.

Wouldn't BSD (2 clause) be the easiest to reliscence down the road?




Re: [9fans] Git/fs: Possibly Usable

2019-04-03 Thread Skip Tavakkolian
Hi,

The avl library doesn't match up to 9legacy version. Any ideas?

BTW, I think your notes on this message are a great start for a README.

Thanks,
-Skip

On Mon, Apr 1, 2019 at 9:48 PM  wrote:

> It was mentioned on this list a short while ago. Now, it's
> more or less at the point where it works for me. Expect
> many bugs and problems, and many more missing tools, but
> "the rest is just scripting".
>
> One caveat I have: Git's index file format is a bit
> boneheaded, so I'm ignoring it. The index doesn't affect
> the wire protocol, so this isn't an interoperability issue,
> unless you share the same physical repository on both
> Plan 9 and Unix. If you do, expect them to get out of
> sync on uncommitted but added files.
>
> In fact, the entire concept of the staging area has been
> removed, as it's both confusing and clunky. There are now
> only three states that files can be in: 'untracked',
> 'dirty', and 'committed'. Tracking is done with empty
> files under .git/index9/{removed,tracked}/path/to/file.
>
> It's implemented in Plan 9 flavor C, and provides tools
> for writing repository contents, and a file system for
> read-only access, which will mirror the current state of
> the repository.
>
> The code is here: https://bitbucket.org/oridb/git9
>
> Install with `mk install`. There's no recursive binding
> of directories, so you need to union /rc/bin/git and
> $objtype/bin/git` by hand.
>
> Documentation has not yet been written. You'll need to
> read the source.
>
> Some usage examples:
>
> git/clone git://git.eigenstate.org/git/ori/mc.git
> git/log
> cd subdir/name
> git/add foo.c
> git/commit
> git/push
>
> Scripts will generally mount git/fs as needed to do
> their work, but if you want to browse the repository
> manually, run it yourself. You'll get `/n/git` mounted,
> with the following contents:
>
> /n/git/object:  The objects in the repo.
> /n/git/branch:  The branches in the repo.
> /n/git/ctl: A file showing the status of the repo.
> Currently, it only shows the
> current branch.
>
> Commits are presented as directories with the following
> contents:
>
> author: A file containing the author name
> hash:   A file containing the commit hash
> parent: A file containing the commit parents, one per line.
> msg:A file containing the log message for that commit
> tree:   A directory containing a view of the repository.
>
> So, for example:
>
> % ls /n/git/branch/heads/master
> /n/git/branch/heads/master/author
> /n/git/branch/heads/master/hash
> /n/git/branch/heads/master/msg
> /n/git/branch/heads/master/parent
> /n/git/branch/heads/master/tree
> % cat /n/git/branch/heads/master/hash
> 7d539a7c08aba3f31b3913e0efef11c43ea9
>
> # This is the same commit, with the same contents.
> % ls /n/git/object/7d539a7c08aba3f31b3913e0efef11c43ea9f9ef
> /n/git/object/7d539a7c08aba3f31b3913e0efef11c43ea9f9ef/author
> /n/git/object/7d539a7c08aba3f31b3913e0efef11c43ea9f9ef/hash
> /n/git/object/7d539a7c08aba3f31b3913e0efef11c43ea9f9ef/msg
> /n/git/object/7d539a7c08aba3f31b3913e0efef11c43ea9f9ef/parent
> /n/git/object/7d539a7c08aba3f31b3913e0efef11c43ea9f9ef/tree
>
> # what git/diff will hopefully do more concisely soon, filtering
> # out the non-git files.
> ape/diff -ur /n/git/branch/heads/master/tree .
> Only in .: .git
> Only in .: debug
> diff -ur /n/git/branch/heads/master/tree/fold.myr ./fold.myr
> --- /n/git/branch/heads/master/tree/fold.myrWed Dec 31
> 16:00:00 1969
> +++ ./fold.myr  Mon Apr  1 21:39:06 2019
> @@ -6,6 +6,8 @@
> const foldexpr : (e : expr# -> std.option(constval))
>  ;;
>
> +/* Look, diffing files just works, and I don't need any fancy
> glue! */
> +
>  const foldexpr = {e
> match e
> | &(`Eident &[.sc=`Sclassenum, .name=name, .ty=`Tyenum
> &(`Body enum)]):
> Only in .: refs
>
>
> The following utilities and binaries are provided:
>
> fs: The git filesystem.
> fetch:  The protocol bits for getting data from a git server.
> send:   The protocol bits for sending data to a git server.
> save:   The gnarly bits for storing the files for a commit.
> conf:   A program to extract information from a config file.
> clone:  Clones a repository.
> commit: Commits a snapshot of the working directory.
> log:Prints the contents of a commmit log.
> add:Tells the repository to add a file to the next commit.
> walk:   `du`, but for git status.
>
>
> Supported protocols: git:// and git+ssh://. If someone
> implements others, I'll gladly accept patches.
>
> TODOs:
> 

Re: [9fans] Git/fs: Possibly Usable

2019-04-03 Thread Giacomo
On April 3, 2019 4:02:49 PM UTC, o...@eigenstate.org wrote:
>Don't particularly care. At some point I'd like to commit it to 9front,
>but I can relicense it then.
>
>Do you have a preference?

Probably MIT or a BSD.

But I can also live with any copyleft of your choice.


Giacomo



Re: [9fans] Git/fs: Possibly Usable

2019-04-03 Thread ori


> Impressive!
> 
> I didn't imagine one could implement git in so few lines of C! Thanks for 
> challenging my assumptions!
> 
> I'd like to port it to Jehanne but I cannot find a license in the repository, 
> so in theory it's "all rights reserved" under most jurisdictions.
> 
> What's your take on this?
> 
> Did you intend to put it under public domain instead? Maybe MIT? Or LPL?
> 
> 
> Giacomo

Don't particularly care. At some point I'd like to commit it to 9front, but I 
can relicense it then.

Do you have a preference?




Re: [9fans] Git/fs: Possibly Usable

2019-04-03 Thread Giacomo
On April 2, 2019 4:41:09 AM UTC, o...@eigenstate.org wrote:
>It was mentioned on this list a short while ago. Now, it's
>more or less at the point where it works for me. Expect
>many bugs and problems, and many more missing tools, but
>"the rest is just scripting".
>
>One caveat I have: Git's index file format is a bit
>boneheaded, so I'm ignoring it. The index doesn't affect
>the wire protocol, so this isn't an interoperability issue,
>unless you share the same physical repository on both
>Plan 9 and Unix. If you do, expect them to get out of
>sync on uncommitted but added files.
>
>In fact, the entire concept of the staging area has been
>removed, as it's both confusing and clunky. There are now
>only three states that files can be in: 'untracked',
>'dirty', and 'committed'. Tracking is done with empty
>files under .git/index9/{removed,tracked}/path/to/file.
>
>It's implemented in Plan 9 flavor C, and provides tools
>for writing repository contents, and a file system for
>read-only access, which will mirror the current state of
>the repository.
>
>The code is here: https://bitbucket.org/oridb/git9
>
>Install with `mk install`. There's no recursive binding
>of directories, so you need to union /rc/bin/git and
>$objtype/bin/git` by hand.
>
>Documentation has not yet been written. You'll need to
>read the source.
>
>Some usage examples:
>
>   git/clone git://git.eigenstate.org/git/ori/mc.git
>   git/log
>   cd subdir/name
>   git/add foo.c
>   git/commit
>   git/push
>
>Scripts will generally mount git/fs as needed to do
>their work, but if you want to browse the repository
>manually, run it yourself. You'll get `/n/git` mounted,
>with the following contents:
>
>   /n/git/object:  The objects in the repo.
>   /n/git/branch:  The branches in the repo.
>   /n/git/ctl: A file showing the status of the repo.
>   Currently, it only shows the current 
> branch.
>
>Commits are presented as directories with the following
>contents:
>
>   author: A file containing the author name
>   hash:   A file containing the commit hash
>   parent: A file containing the commit parents, one per line.
>   msg:A file containing the log message for that commit
>   tree:   A directory containing a view of the repository.
>
>So, for example:
>
>   % ls /n/git/branch/heads/master
>   /n/git/branch/heads/master/author
>   /n/git/branch/heads/master/hash
>   /n/git/branch/heads/master/msg
>   /n/git/branch/heads/master/parent
>   /n/git/branch/heads/master/tree
>   % cat /n/git/branch/heads/master/hash
>   7d539a7c08aba3f31b3913e0efef11c43ea9
>
>   # This is the same commit, with the same contents.
>   % ls /n/git/object/7d539a7c08aba3f31b3913e0efef11c43ea9f9ef
>   /n/git/object/7d539a7c08aba3f31b3913e0efef11c43ea9f9ef/author
>   /n/git/object/7d539a7c08aba3f31b3913e0efef11c43ea9f9ef/hash
>   /n/git/object/7d539a7c08aba3f31b3913e0efef11c43ea9f9ef/msg
>   /n/git/object/7d539a7c08aba3f31b3913e0efef11c43ea9f9ef/parent
>   /n/git/object/7d539a7c08aba3f31b3913e0efef11c43ea9f9ef/tree
>
>   # what git/diff will hopefully do more concisely soon, filtering
>   # out the non-git files.
>   ape/diff -ur /n/git/branch/heads/master/tree .
>   Only in .: .git
>   Only in .: debug
>   diff -ur /n/git/branch/heads/master/tree/fold.myr ./fold.myr
>   --- /n/git/branch/heads/master/tree/fold.myrWed Dec 31 16:00:00 1969
>   +++ ./fold.myr  Mon Apr  1 21:39:06 2019
>   @@ -6,6 +6,8 @@
>   const foldexpr : (e : expr# -> std.option(constval))
>;;
>
>   +/* Look, diffing files just works, and I don't need any fancy glue!
>*/
>   +
>const foldexpr = {e
>   match e
>   | &(`Eident &[.sc=`Sclassenum, .name=name, .ty=`Tyenum &(`Body
>enum)]):
>   Only in .: refs
>
>   
>The following utilities and binaries are provided:
>
>   fs: The git filesystem.
>   fetch:  The protocol bits for getting data from a git server.
>   send:   The protocol bits for sending data to a git server.
>   save:   The gnarly bits for storing the files for a commit.
>   conf:   A program to extract information from a config file.
>   clone:  Clones a repository.
>   commit: Commits a snapshot of the working directory.
>   log:Prints the contents of a commmit log.
>   add:Tells the repository to add a file to the next commit.
>   walk:   `du`, but for git status.
>
>
>Supported protocols: git:// and git+ssh://. If someone
>implements others, I'll gladly accept patches.
>
>TODOs:
>   git/mkpatch:Generate a 'git am' compatible patch.
>   git/apply:  Apply a diff.
>   git/diff:   Wrapper wrapper around git/walk that
>   diffs the changed files.
>   git/merge:  Yup, what it says on the label. Should
>