Re: [PYRITE] Status update and call for information.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, May 24, 2008 at 3:41 AM, Jakub Narebski <jnareb@xxxxxxxxx> wrote:
> "Govind Salinas" <blix@xxxxxxxxxxxxxxxxx> writes:
>
> What I forgot to ask: how would you compare Pyrite to similar tool,
> namely to EasyGit?
>

I think the main difference is this, from the first bullet on the eg site
http://www.gnome.org/~newren/eg/

"eg focuses on documentation and examples"

EasyGit is more or less a thin wrapper over git that is fully compatible
(AFAIK).  Elijah can correct me where I am wrong, but I see it as git
training wheels for the command line.  That probably sounds
pejorative but I don't mean it that way.  I am taking the opportunity
to break compatibility in order to see if I can improve usability.  Also, I
don't want to just focus on the command line, I want to affect all areas.

>> On Fri, May 23, 2008 at 8:07 PM, Jakub Narebski <jnareb@xxxxxxxxx> wrote:
>>> "Govind Salinas" <blix@xxxxxxxxxxxxxxxxx> writes:
>>>
>>>> One of the things that has been commented on by almost any review of
>>>> git are the large numbers of commands that are present and the
>>>> endless stream of flags, options, configuration variables and
>>>> syntaxes that are present in git.  They certainly serve a purpose
>>>> and I probably would not be able to do this without all those things
>>>> but it can get in a normal users way some times.  Here are some of
>>>> the steps I have and will be taking.
>>>
>>> Which is bogus, because most of those commands are plumbing, [almost]
>>> never to be used by user directly.
>>>
>>> If I understand correctly in next major git release those commands are
>>> to be hidden and not present in PATH anymore.
>>
>> That may be true but it is only part of the story.  I see plumbing commands
>> being given to users all the time on the mailing list.  Usually in some
>> combination.  To make it worse they usually get several sets of commands
>> that do something similar but any one may or may not be exactly what
>> they want because not everyone who responds fully understands what the
>> commands are doing.
>
> The change to "git help" to show only porcelain commands unless
> explicitely requested, and to git(7) manpage to have porcelain first
> would help there.
>
> But I think using plumbing in examples are remainder of git early
> days, where it was the only way to work with git.  Tools like Pyrite,
> or EasyGit, wouldn't change it...
>

The idea is that there should be one fairly obvious way to do something.
If you have that then there is less confusion, especially when someone
asks for help.  Plus, if there is one fairly obvious way to do something,
then people will need to ask for help less often.  That is what I hope to
accomplish.

>>>> 1) Reduce the number of commands.
> [...]
> I think you should start not with "minimal number of commands" as a
> goal, but rather with set of distinct tasks ordinary (not scripting)
> user might need, and how to map them into commands.
>
> To heavily overloaded commands are as much if not worse than having
> too many commands to choose from.
>

This is true.  This idea is fairly new and I am still deciding exactly
how things
would get broken up.  After thinking about it, "checkout" probably should
not be combined with the fetch/pull/merge command because they are
too different.  Here is how I am thinking of combining things, perhaps you
and others can give some pointers on what is crazy and what might work.

The ones prefixed with * are the ones that would show up in the short
help, the ones that would be the most typically used.

  bisect = bisect
  blame = blame
* commit = commit + push + stash + init
          push:  This is here because it fits the traditional notion of what a
                    commit does, which is to send a commit to the central
                    server.  I think of it as "I am committing my changes to
                    the remote repository.
          stash:  What is stash but a temporary commit (not on the branch)?
          init: This can be done a couple of ways, either your initial
                  commit is combined with the init or --init is a flag
                  passed to commit to set up the NULL commit.  At least
                  thats how I think of it conceptually.
* checkout = checkout + clone + branch + remote
* config = config
  cherry = cherry + cherry-pick
* diff = diff
  gc = clean + gc + prune + repack
         I plan to make full use of gc --auto to avoid having the
         user run this command, but everyone knows there
         are reasons to run these commands even with --auto.
         "Clean" seems to me to be the working directory version
         of gc.
* gui = gui
* help = help
  import = apply + cvsimport + <scm>import + am
         Here the import strategies would be provided by addons
         and such with apply/am as standard.
  mail = format-patch + send-mail
  move = move
* pull = pull, fetch, merge
  rebase = rebase
  remove = remove
* resolve = mergetool
  revert = reset + reflog
          I was thinking of calling this command "recover" instead of
          revert, which I still think might describe what I want to do
          and might tell you why I think that reflog is something to
          combine here.  "revert --what-can-i-revert-to" would show
          the output of reflog.  That wouldn't be the actual name
          of the flag, but it gives you the idea.
* serve
* show = show + ls + log + grep + rev-list + rev-parse + describe
          Combining all this may raise a few eye-brows, but I think
          it makes sense.  Really this command is git log + ls-files +
          describe and the ability of showing files from other revisions
          from git show, the rest can be reduced to functionality already
          available in git log.
* status = status
  submodule
  tag
* track = add/addremove
  verify = fsck

>> >> 2) Reduce complexity.
> [...]
>>>> 3) Addons.
[snip problems with revision numbers]
> [...]
>> I responded to this in another mail.  The other DVCSs don't claim that
>> revision numbers are all of those things.  It is only necessary that when
>> two people say the same thing, it mean the same thing.
>
>> This doesn't stop them from using these numbers more than the sha1
>> IDs because given a branch, the numbers are solid.  Doing things the
>> way I propose has the same properties.
>
> I wonder how useful in practice those revision numbers are in larger
> repositories, with nonlinear history, i.e. if -r 6453:master -R 6455:master
> (or something like that) is truly easier to use than master~2..master
>
> I _think_ that sha-1 are largely theoretical scare, as for example I
> don't use them much, and if I use them it is in copy'n'paste manner.
>

They are useful for a different purpose.  If I say master~5 today it
probably won't yield the same commit tomorrow.  while 6450:master would.
Honestly, I have absolutely no problem with using sha1s myself, I just put
this in because I have seen several people ask for it on the mailing list
recently.  I thought to myself, that they COULD have it if they really wanted.
Also keep in mind that 12345: is usually enough as an empty RHS would
default to HEAD, which saves a bit of typing.

>>>> 5) One stop shop.
[snip windows + webserver headaches]
>>> BTW. there always is git-instaweb.
>>>
>>
>> Yeah, but I still need the webserver, thats what I want to get rid of.  If you
>> want to do some ad-hoc sharing it is a huge problem and you may not
>> have permissions/time to install software.
>>
>>> But having git-serve would be nice...
>>>
>>
>> Indeed.
>
> And with Python AFAIK you can quite easily set up _simple_ web server
> for HTTP access and browsing repository...
>
> BTW. there was at some time git web interface in Python (old wit), but
> it lost to gitweb; nowadays Ruby, eRuby or Ruby on Rails seems to be
> the rage (new Wit (from XMMS2), Gitarella, Gitorious, GitHub).
>
I was thinking of using Django so that I could reuse the stuff that the
review-board folks are doing.  I like their side-by-side diffs etc.  But here
is the kicker, I want to use this to do what the hg people have done.
They built their remote push-pull functionality into their built-in webserver.
If we do this then the pyrite http protocol can be a smart transport.  I
believe that bzr has a similar feature in theirs.

Thanks for taking a look and giving me your opinion, I like getting
feedback about this.

-Govind
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux