GithubHelp home page GithubHelp logo

frostming / legit Goto Github PK

View Code? Open in Web Editor NEW
5.7K 80.0 219.0 2.12 MB

Git for Humans, Inspired by GitHub for Mac™.

Home Page: https://frostming.github.io/legit

License: BSD 3-Clause "New" or "Revised" License

Shell 6.76% Python 86.85% Roff 6.40%
git cli tool kennethreitz

legit's Introduction

Legit: Git for Humans

Inspired by GitHub for Mac.

The Concept

GitHub for Mac is not just a Git client.

This comment on Hacker News says it best:

They haven't re-created the git CLI tool in a GUI, they've created something different. They've created a tool that makes Git more accessible. Little things like auto-stashing when you switch branches will confuse git veterans, but it will make Git much easier to grok for newcomers because of the assumptions it makes about your Git workflow.

Why not bring this innovation back to the command line?

The Interface

sw <branch>

Switches to specified branch. Defaults to current branch. Automatically stashes and unstashes any changes. (alias: switch for git < 2.23)

sync [<branch>]

Synchronizes the given branch. Defaults to current branch. Stash, Fetch, Auto-Merge/Rebase, Push, and Unstash. You can only sync published branches. (alias: sy)

publish [<branch>]

Publishes specified branch to the remote. (alias: pub)

unpublish <branch>

Removes specified branch from the remote. (alias: unp)

undo

Un-does the last commit in git history. (alias: un)

branches [<wildcard pattern>]

Display a list of available branches. Allows wildcard pattern matching of branch name.

The Installation

image

image

image

image

From PyPI with the Python package manager:

pip install legit

Or download a standalone Windows executable from GitHub Releases.

Alternatively, legit can be installed via Homebrew under macOS and Linux:

brew install legit

Several system package distributions also include legit. Available legit version information can be found at the end of this README.

To install the cutting edge version from the git repository:

git clone https://github.com/frostming/legit.git
cd legit
python setup.py install

Note: if you encountered Permission denied, prepend sudo before the pip or python setup.py command.

You'll then have the wonderful legit command available. Run it within a repository.

To view usage and examples, run legit with no commands or options:

legit

To install the git aliases, run the following command:

legit --install

To uninstall the git aliases, run the following command:

legit --uninstall

Command Options

All legit commands support --verbose and --fake options.

In order to view the git commands invoked by legit, use the --verbose option:

legit sync --verbose

If you want to see the git commands used by legit but don't want them invoked, use the --fake option:

legit publish --fake

Legit Options

By default, legit sync avoids a true merge. If the merge is not fast-forward, legit will rebase.

In gitconfig, if legit.smartMerge is set to false, and pull.rebase is set to false or unset, then legit will not rebase but merge.

If legit.smartMerge is set to false, and pull.ff is set to only, then if the merge is not fast-forward, legit will abort.

Caveats

  • All remote operations are carried out by the remote identified in $ git config legit.remote remotename
  • If a stash pop merge fails, Legit stops. I'd like to add checking for a failed merge, and undo the command with friendly error reporting.

Packaging Status

packaing status

legit's People

Contributors

akeemmclennon avatar autoplectic avatar bbonf avatar blueyed avatar cczona avatar doggy8088 avatar frostming avatar grahamu avatar grantcox avatar guptarohit avatar hargriffle avatar hickford avatar hugovk avatar kennethreitz avatar kristianperkins avatar laurentb avatar mattn avatar miguelbaldi avatar mosrod avatar mxey avatar octokatie avatar pjambet avatar ramonpin avatar raylillywhite avatar stevage avatar suan avatar tallowen avatar tcattd avatar weakish avatar wkentaro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

legit's Issues

errors when switching from one branch to another

Tried legit for the first time (installed from the Arch Linux package here: https://aur.archlinux.org/packages.php?ID=50308).

Here's what I got:

legit switch master
Saving local changes.
Saved working directory and index state On athome: Legit: stashing before switching branches.
HEAD is now at cb9a61b Changed git aliases and added gitst
Switching to master.
Your branch is behind 'origin/master' by 27 commits, and can be fast-forwarded.
Exception TypeError: "'NoneType' object is not callable" in <bound method WindowCursor.del of <smmap.mman.WindowCursor object at 0x1ea85d0>> ignored
Exception TypeError: "'NoneType' object is not callable" in <bound method WindowCursor.del of <smmap.mman.WindowCursor object at 0x1b3b1b0>> ignored
Exception TypeError: "'NoneType' object is not callable" in <bound method WindowCursor.del of <smmap.mman.WindowCursor object at 0x1ea8578>> ignored

disabling color (?) coding on Windows (7)

Is there a way to easily disable control characters (?) from legit output. By default (Python 2.7.2 x64, Windows 7) legit output looks like this:

 >legit
 ←[31mlegit←[39m. ←[30mA Kenneth Reitz ProjectΓäó←[39m

 Usage: ←[34mlegit <command>←[39m
 Commands: ←[32mbranches←[39m, ←[32mgraft←[39m, ←[32mharvest←[39m, ←[32mhelp←[39m,  
 ←[32minstall←[39m, ←[32mpublish←[39m, ←[32msettings←[39m,
 ←[32msprout←[39m, ←[32mswitch←[39m, ←[32msync←[39m, and ←[32munpublish←[39m.

Thanks!

switch does not preserve per branch stash

When using switch, the stash is only preserved for the first branch and not for every branch individually. Thus uncommitted changes from another branch overwrite the first branch's stash.

Example in pseudo shell:

<branch1>$ echo "foobar" > foobar.txt
<branch1>$ cat foobar.txt
foo
foobar
<branch1>$ legit switch branch2
Stashing and switching
<branch2>$ cat foobar.txt
foo
<branch2>$ echo "barfoo" > foobar.txt
<branch2>$ legit switch branch1
Stashing and switching
<branch1>$ cat foobar.txt
foo    
barfoo

sprout from current branch if only 1 argument is provided

I tried to "git sprout test" and expected a test branch to be created from the current branch, but instead it complained there was no branch called test.

when providing only one argument, sprout should branch from the current branch into a new branch with the name passed in the argument

Installing with pip fails

When trying to install legit using pip, I get an error and the installation fails. Error is pasted below. I've never used pip before, so I'm just leaving it here in hopes that it's useful.

Thanks!


/usr/bin/pip run on Mon Apr 2 16:44:27 2012
Downloading/unpacking legit

Running setup.py egg_info for package legit

/home/gmeans/build/legit/setup.py:19: Warning: 'with' will become a reserved keyword in Python 2.6

Traceback (most recent call last):

  File "<string>", line 14, in <module>

  File "/home/gmeans/build/legit/setup.py", line 19

    with open('reqs.txt') as f:

            ^

SyntaxError: invalid syntax

Complete output from command python setup.py egg_info:

/home/gmeans/build/legit/setup.py:19: Warning: 'with' will become a reserved keyword in Python 2.6

Traceback (most recent call last):

File "", line 14, in

File "/home/gmeans/build/legit/setup.py", line 19

with open('reqs.txt') as f:

        ^

SyntaxError: invalid syntax


Command python setup.py egg_info failed with error code 1 in /home/gmeans/build/legit

Exception information:
Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/pip-1.1.post1-py2.5.egg/pip/basecommand.py", line 104, in main
status = self.run(options, args)
File "/usr/lib/python2.5/site-packages/pip-1.1.post1-py2.5.egg/pip/commands/install.py", line 245, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
File "/usr/lib/python2.5/site-packages/pip-1.1.post1-py2.5.egg/pip/req.py", line 1015, in prepare_files
req_to_install.run_egg_info()
File "/usr/lib/python2.5/site-packages/pip-1.1.post1-py2.5.egg/pip/req.py", line 226, in run_egg_info
command_desc='python setup.py egg_info')
File "/usr/lib/python2.5/site-packages/pip-1.1.post1-py2.5.egg/pip/init.py", line 256, in call_subprocess
% (command_desc, proc.returncode, cwd))
InstallationError: Command python setup.py egg_info failed with error code 1 in /home/gmeans/build/legit

Switch is not unstashing

When I use switch, it stashes but doesn't pop the stash after checkout the branch.

This is kind of new behavior, perhaps since I've installed legit with homebrew?

legit v0.1.0

Support non-standard git executable

For example, to support github in the windows console, you need to use git/cmd/git.cmd - so directly calling popen('git') won't work.

GitPython supports this by looking for a GIT_PYTHON_GIT_EXECUTABLE environment variable (gitpython-developers/GitPython#26)

git = os.environ.get("GIT_PYTHON_GIT_EXECUTABLE", 'git')

perhaps Legit can do the same?

switching branch gives GitCommandError

64-bit Arch Linux

python2-legit-git 20120326
python2-smmap 0.8.2
gitpython 0.3.2_rc1

Here's the output:

% legit switch athome
Saving local changes.
Saved working directory and index state On master: Legit: stashing before switching branches.
HEAD is now at ec68be8 Made changes to gendesk
Switching to athome.
Restoring local changes.
Traceback (most recent call last):
File "/usr/bin/legit", line 9, in
load_entry_point('legit==0.1.1', 'console_scripts', 'legit')()
File "/usr/lib/python2.7/site-packages/legit/cli.py", line 45, in main
cmd_map.get(arg).call(args)
File "/usr/lib/python2.7/site-packages/legit/cli.py", line 125, in cmd_switch
status_log(unstash_it, 'Restoring local changes.')
File "/usr/lib/python2.7/site-packages/legit/cli.py", line 80, in status_log
log = func(_args, *_kwargs)
File "/usr/lib/python2.7/site-packages/legit/scm.py", line 99, in unstash_it
'stash', 'pop', 'stash@{{0}}'.format(stash_index)])
File "/usr/lib/python2.7/site-packages/git/cmd.py", line 377, in execute
raise GitCommandError(command, status, stderr_value)
git.exc.GitCommandError: 'git stash pop stash@{0}' returned exit status 1:

stash pop merge fails

"If a stash pop merge fails, Legit stops. I'd like to add checking for a merge failure, and undo the command with friendly error reporting."

what do you mean with "Legit stops"?

Use libgit2!

While legit is a nice proof of concept, in the long run, it will stall. It's best to use libgit2 via its Python binding pygit2.

git repo path is hardcoded as `.git`

Having a quick browse through your code, I saw that the git repo path is hardcoded as .git. (The default is .git but it can be set to anything else via either --git_dir or $GIT_DIR.) This could bite users who have different git repo paths.

(Aside: since you're using Python, why don't you use pygit2?)

Anyway, I don't want to pick fault here—I just had quick a browse through this very interesting-sounding project someone retweeted on my Twitter feed and saw a few issues that would bother me.

arch linux package

So I created a package build for Arch Linux. It's available in the AUR

You're free to link this in the README or somewhere else.

Btw: is legit fully python3-compatible? If so, I will update the package and it's dependencies for arch linux, too.

Branches deleted remotely still show as published in legit

I had a few branches that were deleted from Github by someone else remotely. When I run 'git branches' they still show up as (published) by legit.

Trying to call git unpublished gives this error.


Traceback (most recent call last):
  File "<string>", line 7, in <module>
  File "legit_r/build/pyi.darwin/legit_r/outPYZ1.pyz/legit.cli", line 45, in main
  File "legit_r/build/pyi.darwin/legit_r/outPYZ1.pyz/legit.cli", line 289, in cmd_unpublish
  File "legit_r/build/pyi.darwin/legit_r/outPYZ1.pyz/legit.cli", line 80, in status_log
  File "legit_r/build/pyi.darwin/legit_r/outPYZ1.pyz/legit.scm", line 196, in unpublish_branch
  File "legit_r/build/pyi.darwin/legit_r/outPYZ1.pyz/git.cmd", line 377, in execute
git.exc.GitCommandError: 'git push origin :Story27438231-iphone-order-summary-currency-relayout' returned exit status 1: error: unable to push to unqualified destination: Story27438231-iphone-order-summary-currency-relayout
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to '[email protected]:hoteltonight/ht-ios.git'

Calling git branch -d [BranchName] deletes the local branch, but it will still show as an existing published branch to Legit.

git config legit.remote

"remote did not have any references"

I've got my repo pointed to two remotes -- "origin" which we maintain internally, and "github", which is automatically mirrored from origin. We never push directly to "github".

Whenever I try to run a legit command from this repo, I see the following error:

Traceback (most recent call last):
  File "/usr/bin/legit", line 9, in <module>
    load_entry_point('legit==0.1.1', 'console_scripts', 'legit')()
  File "/usr/lib/python2.7/site-packages/legit/cli.py", line 45, in main
    cmd_map.get(arg).__call__(args)
  File "/usr/lib/python2.7/site-packages/legit/cli.py", line 337, in cmd_branches
    display_available_branches()
  File "/usr/lib/python2.7/site-packages/legit/cli.py", line 438, in display_available_branches
    branches = get_branches()
  File "/usr/lib/python2.7/site-packages/legit/scm.py", line 233, in get_branches
    for b in repo.remotes[0].refs:
  File "/usr/lib/python2.7/site-packages/git/remote.py", line 435, in refs
    assert out_refs, "Remote %s did not have any references" % self.name
AssertionError: Remote github did not have any references

If I comment out the "github" repo in the config, it works fine. I tried a git fetch github but that didn't help.

Allow rebasing in git sync

git sync should allow (or be able to default to) rebasing.

Even though the documentation says the that there is an "Auto-merge/rebase" the code seems to point out that it can only merge. Am I missing something?

crash when there is no remote repository

When there is no remote set, which was already pushed to, legit crashes on branch actions (branches, switch).

~/Desktop/test (master) $ legit branches
 Traceback (most recent call last):
   File "c:\Python27\Scripts\legit-script.py", line 8, in <module>
     load_entry_point('legit==0.0.5', 'console_scripts', 'legit')()
   File "c:\Python27\lib\site-packages\legit\cli.py", line 32, in main
     cmd_map.get(arg).__call__(args)
   File "c:\Python27\lib\site-packages\legit\cli.py", line 237, in cmd_branches
     display_available_branches()
   File "c:\Python27\lib\site-packages\legit\cli.py", line 248, in display_available_branches
     branches = get_branches()
   File "c:\Python27\lib\site-packages\legit\scm.py", line 158, in get_branches
     for b in repo.remotes[0].refs:
   File "c:\Python27\lib\site-packages\git\util.py", line 566, in __getitem__
     return list.__getitem__(self,index)
 IndexError: list index out of range

~/Desktop/test (master) $ git remote add origin ../test-bare
~/Desktop/test (master) $ legit branches
<crashes>
~/Desktop/test (master) $ git push origin master
~/Desktop/test (master) $ legit branches
2nd-branch  (unpublished)
*  master

git sprout fails badly

I have 3 published branches, but decided to try running 'git sprout' anyways, with no additional arguments. It didn't go well.

$ git sprout
Saving local changes.
Saved working directory and index state On master: Legit: stashing before switching branches.
HEAD is now at 1bd9b18 leaving work
Branching master to None.
Traceback (most recent call last):
  File "/home/parsons1/.virtualenvs/dev/bin/legit", line 8, in <module>
    load_entry_point('legit==0.1.1', 'console_scripts', 'legit')()
  File "/home/parsons1/.virtualenvs/dev/lib/python2.7/site-packages/legit/cli.py", line 45, in main
    cmd_map.get(arg).__call__(args)
  File "/home/parsons1/.virtualenvs/dev/lib/python2.7/site-packages/legit/cli.py", line 208, in cmd_sprout
    off_branch, new_branch)
  File "/home/parsons1/.virtualenvs/dev/lib/python2.7/site-packages/legit/cli.py", line 80, in status_log
    log = func(*args, **kwargs)
  File "/home/parsons1/.virtualenvs/dev/lib/python2.7/site-packages/legit/scm.py", line 167, in sprout_branch
    return repo.git.execute([git, 'checkout', off_branch, '-b', branch])
  File "/home/parsons1/.virtualenvs/dev/lib/python2.7/site-packages/git/cmd.py", line 335, in execute
    **subprocess_kwargs
  File "/usr/local/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/local/lib/python2.7/subprocess.py", line 1228, in _execute_child
    raise child_exception
TypeError: execv() arg 2 must contain only strings

[feature request] legit addremove

It would be nice to improve the git command live API by replacing

git add . -vA

with

legit addremove

similiar to the way Mercurial does it.

Autocomplete

It would be nice to autocomplete commands and branch names by pressing tab.

git sync failed

No real idea as to why but the trace is here:

Pushing commits to the server.
Restoring local changes.
Traceback (most recent call last):
File "/usr/local/bin/legit", line 9, in
load_entry_point('legit==0.1.1', 'console_scripts', 'legit')()
File "/Library/Python/2.7/site-packages/legit/cli.py", line 45, in main
cmd_map.get(arg).call(args)
File "/Library/Python/2.7/site-packages/legit/cli.py", line 162, in cmd_sync
status_log(unstash_it, 'Restoring local changes.', sync=True)
File "/Library/Python/2.7/site-packages/legit/cli.py", line 80, in status_log
log = func(_args, *_kwargs)
File "/Library/Python/2.7/site-packages/legit/scm.py", line 99, in unstash_it
'stash', 'pop', 'stash@{{0}}'.format(stash_index)])
File "/Library/Python/2.7/site-packages/git/cmd.py", line 377, in execute
raise GitCommandError(command, status, stderr_value)
git.exc.GitCommandError: 'git stash pop stash@{0}' returned exit status 1:

Legit dies on 'sync' command

Got this traceback while running 'legit sync' -- rather disconcerting... :-/

jknutson@jensck-mac-2~/Documents/git_repos/c42_crashplan_android/crashplan_android$ legit sync Pulling commits from the server. Traceback (most recent call last): File "/usr/local/bin/legit", line 8, in <module> load_entry_point('legit==0.0.9', 'console_scripts', 'legit')() File "/Library/Python/2.6/site-packages/legit/cli.py", line 34, in main cmd_map.get(arg).__call__(args) File "/Library/Python/2.6/site-packages/legit/cli.py", line 131, in cmd_sync status_log(smart_pull, 'Pulling commits from the server.') File "/Library/Python/2.6/site-packages/legit/cli.py", line 58, in status_log log = func(*args, **kwargs) File "/Library/Python/2.6/site-packages/legit/scm.py", line 83, in smart_pull return repo.git.execute(['git', verb, '{0}/{1}'.format(remote, branch)]) File "/Library/Python/2.6/site-packages/git/cmd.py", line 377, in execute raise GitCommandError(command, status, stderr_value) git.exc.GitCommandError: 'git merge origin/develop' returned exit status 1: Exception TypeError: "'NoneType' object is not callable" in <bound method WindowCursor.__del__ of <smmap.mman.WindowCursor object at 0x1017c9f18>> ignored Exception TypeError: "'NoneType' object is not callable" in <bound method WindowCursor.__del__ of <smmap.mman.WindowCursor object at 0x1007c4890>> ignored

installation fails on cygwin

~ $ pip install legit
Downloading/unpacking legit
Downloading legit-0.1.1.tar.gz
Running setup.py egg_info for package legit
Downloading/unpacking clint>=0.2.4 (from legit)
Downloading clint-0.3.1.tar.gz
Running setup.py egg_info for package clint
Downloading/unpacking gitpython>=0.3.0 (from legit)
Downloading GitPython-0.3.2.RC1.tar.gz (313Kb): 313Kb downloaded
Running setup.py egg_info for package gitpython
warning: no files found matching 'README'
Downloading/unpacking gitdb>=0.5.1 (from gitpython>=0.3.0->legit)
Downloading gitdb-0.5.4.tar.gz (50Kb): 50Kb downloaded
Running setup.py egg_info for package gitdb
Downloading/unpacking async>=0.6.1 (from gitdb>=0.5.1->gitpython>=0.3.0->legit)
Downloading async-0.6.1.tar.gz
Running setup.py egg_info for package async
Downloading/unpacking smmap>=0.8.0 (from gitdb>=0.5.1->gitpython>=0.3.0->legit)
Downloading smmap-0.8.2.tar.gz
Running setup.py egg_info for package smmap
Installing collected packages: legit, clint, gitpython, gitdb, async, smmap
Running setup.py install for legit
Installing legit script to /usr/bin
Running setup.py install for clint
warning: install_data: setup script did not provide a directory for 'README.rst' -- installing right in '/usr'
warning: install_data: setup script did not provide a directory for 'HISTORY.rst' -- installing right in '/usr'
Complete output from command /usr/bin/python2.6 -c "import setuptools;file='/home/Admin/build/clint/setup.py';exec(compile(open(file).read().replace('\r\n', '\n'), file, 'exec'))" install --single-version-externally-managed --record /tmp/pip-k2VYT5-record/install-record.txt:
running install

running build

running build_py

creating build

creating build/lib

creating build/lib/clint

copying clint/arguments.py -> build/lib/clint

copying clint/eng.py -> build/lib/clint

copying clint/pipes.py -> build/lib/clint

copying clint/resources.py -> build/lib/clint

copying clint/utils.py -> build/lib/clint

copying clint/init.py -> build/lib/clint

creating build/lib/clint/textui

copying clint/textui/colored.py -> build/lib/clint/textui

copying clint/textui/cols.py -> build/lib/clint/textui

copying clint/textui/core.py -> build/lib/clint/textui

copying clint/textui/formatters.py -> build/lib/clint/textui

copying clint/textui/progress.py -> build/lib/clint/textui

copying clint/textui/init.py -> build/lib/clint/textui

creating build/lib/clint/packages

copying clint/packages/appdirs.py -> build/lib/clint/packages

copying clint/packages/ordereddict.py -> build/lib/clint/packages

copying clint/packages/init.py -> build/lib/clint/packages

creating build/lib/clint/packages/colorama

copying clint/packages/colorama/ansi.py -> build/lib/clint/packages/colorama

copying clint/packages/colorama/ansitowin32.py -> build/lib/clint/packages/colorama

copying clint/packages/colorama/initialise.py -> build/lib/clint/packages/colorama

copying clint/packages/colorama/win32.py -> build/lib/clint/packages/colorama

copying clint/packages/colorama/winterm.py -> build/lib/clint/packages/colorama

copying clint/packages/colorama/init.py -> build/lib/clint/packages/colorama

running install_lib

creating /usr/lib/python2.6/site-packages/clint

copying build/lib/clint/arguments.py -> /usr/lib/python2.6/site-packages/clint

copying build/lib/clint/eng.py -> /usr/lib/python2.6/site-packages/clint

creating /usr/lib/python2.6/site-packages/clint/packages

copying build/lib/clint/packages/appdirs.py -> /usr/lib/python2.6/site-packages/clint/packages

creating /usr/lib/python2.6/site-packages/clint/packages/colorama

copying build/lib/clint/packages/colorama/ansi.py -> /usr/lib/python2.6/site-packages/clint/packages/colorama

copying build/lib/clint/packages/colorama/ansitowin32.py -> /usr/lib/python2.6/site-packages/clint/packages/colorama

copying build/lib/clint/packages/colorama/initialise.py -> /usr/lib/python2.6/site-packages/clint/packages/colorama

copying build/lib/clint/packages/colorama/win32.py -> /usr/lib/python2.6/site-packages/clint/packages/colorama

copying build/lib/clint/packages/colorama/winterm.py -> /usr/lib/python2.6/site-packages/clint/packages/colorama

copying build/lib/clint/packages/colorama/init.py -> /usr/lib/python2.6/site-packages/clint/packages/colorama

copying build/lib/clint/packages/ordereddict.py -> /usr/lib/python2.6/site-packages/clint/packages

copying build/lib/clint/packages/init.py -> /usr/lib/python2.6/site-packages/clint/packages

copying build/lib/clint/pipes.py -> /usr/lib/python2.6/site-packages/clint

copying build/lib/clint/resources.py -> /usr/lib/python2.6/site-packages/clint

creating /usr/lib/python2.6/site-packages/clint/textui

copying build/lib/clint/textui/colored.py -> /usr/lib/python2.6/site-packages/clint/textui

copying build/lib/clint/textui/cols.py -> /usr/lib/python2.6/site-packages/clint/textui

copying build/lib/clint/textui/core.py -> /usr/lib/python2.6/site-packages/clint/textui

copying build/lib/clint/textui/formatters.py -> /usr/lib/python2.6/site-packages/clint/textui

copying build/lib/clint/textui/progress.py -> /usr/lib/python2.6/site-packages/clint/textui

copying build/lib/clint/textui/init.py -> /usr/lib/python2.6/site-packages/clint/textui

copying build/lib/clint/utils.py -> /usr/lib/python2.6/site-packages/clint

copying build/lib/clint/init.py -> /usr/lib/python2.6/site-packages/clint

byte-compiling /usr/lib/python2.6/site-packages/clint/arguments.py to arguments.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/eng.py to eng.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/packages/appdirs.py to appdirs.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/packages/colorama/ansi.py to ansi.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/packages/colorama/ansitowin32.py to ansitowin32.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/packages/colorama/initialise.py to initialise.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/packages/colorama/win32.py to win32.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/packages/colorama/winterm.py to winterm.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/packages/colorama/init.py to init.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/packages/ordereddict.py to ordereddict.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/packages/init.py to init.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/pipes.py to pipes.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/resources.py to resources.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/textui/colored.py to colored.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/textui/cols.py to cols.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/textui/core.py to core.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/textui/formatters.py to formatters.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/textui/progress.py to progress.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/textui/init.py to init.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/utils.py to utils.pyc

byte-compiling /usr/lib/python2.6/site-packages/clint/init.py to init.pyc

running install_data

warning: install_data: setup script did not provide a directory for 'README.rst' -- installing right in '/usr'

copying README.rst -> /usr

warning: install_data: setup script did not provide a directory for 'HISTORY.rst' -- installing right in '/usr'

copying HISTORY.rst -> /usr

running install_egg_info

running egg_info

creating clint.egg-info

writing clint.egg-info/PKG-INFO

writing top-level names to clint.egg-info/top_level.txt

writing dependency_links to clint.egg-info/dependency_links.txt

writing manifest file 'clint.egg-info/SOURCES.txt'

warning: manifest_maker: standard file '-c' not found

reading manifest file 'clint.egg-info/SOURCES.txt'

writing manifest file 'clint.egg-info/SOURCES.txt'

Copying clint.egg-info to /usr/lib/python2.6/site-packages/clint-0.3.1-py2.6.egg-info

running install_scripts

writing list of installed files to '/tmp/pip-k2VYT5-record/install-record.txt'


Command /usr/bin/python2.6 -c "import setuptools;file='/home/Admin/build/clint/setup.py';exec(compile(open(file).read().replace('\r\n', '\n'), file, 'exec'))" install --single-version-externally-managed --record /tmp/pip-k2VYT5-record/install-record.txt failed with error code -6 in /home/Admin/build/clint
Storing complete log in /home/Admin/.pip/pip.log

[feature request] submodule support

i think legit could grow some sort of submodule support -- perhaps legit sync would update all submodules? or maybe a dedicated command to work with submodules.

Support "-" in Git

First, thank you for legit. I like it already.

In regular Git, if you are on branch "foo" and you do "git checkout master" ... You can switch back to the previous branch with "-": "git checkout -" with bring you back to branch "foo".

This can be filed under "nice to have" :).

Thanks again.

git-legit.org is missing the second argument for git graft

$ git graft <branch>
Merge unpublished branch into current branch, then remove it.

This blows up, apparently because I am failing to say which branch I want to graft my new branch (yay) into:

mybox:myrepo kentbrew$ git graft yay
Switching to yay.
Grafting yay into yay.
Traceback (most recent call last):
File "/usr/local/bin/legit", line 8, in <module>
load_entry_point('legit==0.1.1', 'console_scripts', 'legit')()
File "/Library/Python/2.7/site-packages/legit/cli.py", line 45, in main
cmd_map.get(arg).call(args)
File "/Library/Python/2.7/site-packages/legit/cli.py", line 247, in cmd_graft
colored.yellow(branch), colored.yellow(into_branch)), branch)
File "/Library/Python/2.7/site-packages/legit/cli.py", line 80, in status_log
log = func(_args, *_kwargs)
File "/Library/Python/2.7/site-packages/legit/scm.py", line 185, in graft_branch
out = repo.git.execute([git, 'branch', '-D', branch])
File "/Library/Python/2.7/site-packages/git/cmd.py", line 377, in execute
raise GitCommandError(command, status, stderr_value)
git.exc.GitCommandError: 'git branch -D yay' returned exit status 1: error: Cannot delete the branch 'yay' which you are currently on.

This works like a champ:

mybox:myrepo kentbrew$ git graft yay master

Switching to master.
Grafting yay into master.
Merge made by the 'recursive' strategy.
woo.txt | 2 ++
yay.txt | 2 ++
2 files changed, 4 insertions(+)
create mode 100644 woo.txt
create mode 100644 yay.txt
Deleted branch yay (was 373d97a).

i must be missing something about remotes

i love the idea of making git more human and codifying a set of good practice conventions into a tool like this (and like the mac GUI), but i think i must be missing something basic about the implied workflow, or i am trying to apply it to a use-case that is outside of the domain it is trying to address (or i'm a dope).

the way that i usually set up to contribute to someone else's open source project is to:

  1. clone their repo as origin on my local machine
  2. fork their repo on github
  3. add my fork as an additional remote to my local repo

then i create feature branches on my local machine and push them to my github fork and submit pull requests to the owner while also being able to fetch/pull from the owner's repo to keep up with their changes.

if i understand it right, legit is only intended and optimized for working with a single remote (i.e. my fork on github). so in the scenario above of contributing to someone else's project, how do i keep up with their changes?

i know that i can add an additional remote and just do what i always do outside of legit, but is this something that legit is not intended to address, or am i missing something?

any explanation or pointer to where this is already discussed would be very welcome.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.