gitless-vcs/gitless

Windows support 2

techtonik opened this issue ยท 20 comments

#13 (comment)

There are issues with Windows. tox tests fail.

py27 runtests: commands[0] | nosetests
.................FFF................................EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE.EEEEEE

I've setup appveyor (2a0b6a6) but we are missing something because the build fails before executing the tests.

The problem seems to be an access denied error on a temp file. If there's a Windows expert out there that wants to figure out what's going on that'd be awesome

Why libgit2 should be built from source? gitless just needs a wheel binary.

https://github.com/libgit2/libgit2/blob/master/appveyor.yml

The script follows the installation instructions for pygit2. Pygit2 requires libgit2 to be installed and it seems like the preferred approach for installing libgit2 is to build it from source.

@spderosso it is pygit2 bug then.

Perhaps, but the build log says:

Installed c:\projects\gitless\.eggs\pygit2-0.25.1-py2.7-win32.egg

which suggests that pygit2 was correctly installed. Yet the file that is causing the error is the cffi backend, which is related to pygit2.

I am going to try to see if I can reproduce it locally.

@spderosso what is the pip version? I'd expect it to build and install wheel and not egg.

I filled libgit2/pygit2#714 to update Windows installation instructions. I see no need to rebuild pygit2 from source.

Now tests on Python 3 fail because of pbs https://ci.appveyor.com/project/spderosso/gitless/build/1.0.12/job/0osex6dyvhxk9xx3#L71 with:

pbs.CommandNotFound: __path__

Either fork and patch https://github.com/techtonik/pbs or switch to tomerfiliba/plumbum#332

I abandoned bad habit of using Windows, so feel free to pick up this issue.

GL works with Cygwin on Windows, but native support via binary wheels is the way to go.

Are there any plans to get a running windows version? Iโ€˜d like to use it, but I need to use Windows 7 at my work.

Thank you!

arigo commented

I feel that I should note it here, but gitless seems to work fine on Windows after you install Python 2.7 (tested with the 32-bit version). Afterwards, just do: python -m ensurepip and python -m pip install gitless

Any word on this? Python 2 has been obsolete for years, and is officially deprecated. Windows is a very popular OS. What's the limfac on releasing a Windows binary or something that runs on top of Py 3?

@David-OConnor

  1. Fix link to AppVeyor automatic tests after repo renaming - see README
  2. Fix AppVeyor
  3. Fix tests
  4. Run tests on Python 3 to see what is broken

If you running Windows, you can run the tests and report results here.

I'd like to help running tests on Windows (I'm developing in Delphi & CMD on Windows and the white papers on Gitless read like that's finally the solution to Git screwing with my source because I got some arcane detail wrong), but I have trouble getting started.

If someone would find the motivation to get a newbie willing to learn started, I'd be rather grateful.

@neoboot With the new changes I just pushed, Gitless should now work on Windows if you have Python 3.8. See: https://ci.appveyor.com/project/spderosso/gitless-11bfm

Can you or anyone else using Windows check that it works? You can follow the instructions on the README file to install from source and run the tests. There appears to be a problem with Windows+Python 3.7, which I might be able to take a look at later this week.

Using a Python 3.8 conda environment, I was able to install gitless, with a twist:

conda install "pygit2==0.28.2"
pip install gitless

Note that conda install pygit2 will install version 1.2.1 which collides with the pip package dependencies.

Running Gitless:

(py38) C:\Users\xyz>gl --help
Traceback (most recent call last):
  File "c:\programdata\miniconda3\envs\py38\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "c:\programdata\miniconda3\envs\py38\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\ProgramData\Miniconda3\envs\py38\Scripts\gl.exe\__main__.py", line 4, in <module>
  File "c:\programdata\miniconda3\envs\py38\lib\site-packages\gitless\cli\gl.py", line 18, in <module>
    from pbs import ErrorReturnCode
  File "c:\programdata\miniconda3\envs\py38\lib\site-packages\pbs.py", line 575, in __getattr__
    return self.env[name]
  File "c:\programdata\miniconda3\envs\py38\lib\site-packages\pbs.py", line 527, in __missing__
    return Command._create(k)
  File "c:\programdata\miniconda3\envs\py38\lib\site-packages\pbs.py", line 265, in _create
    if not path: raise CommandNotFound(program)
pbs.CommandNotFound: __path__

Yeah that seems to work :-)

C:\Users\Arne\Desktop\forks>git clone https://github.com/gitless-vcs/gitless.git
Cloning into 'gitless'...
remote: Enumerating objects: 4130, done.
remote: Total 4130 (delta 0), reused 0 (delta 0), pack-reused 4130
Receiving objects: 100% (4130/4130), 22.40 MiB | 3.07 MiB/s, done.
Resolving deltas: 100% (2580/2580), done.

C:\Users\Arne\Desktop\forks\gitless>activate py38

(py38) C:\Users\Arne\Desktop\forks\gitless>python setup.py build
running build
running build_py
creating build
creating build\lib
creating build\lib\gitless
copying gitless\core.py -> build\lib\gitless
copying gitless\__init__.py -> build\lib\gitless
creating build\lib\gitless\cli
copying gitless\cli\commit_dialog.py -> build\lib\gitless\cli
copying gitless\cli\file_cmd.py -> build\lib\gitless\cli
copying gitless\cli\gl.py -> build\lib\gitless\cli
copying gitless\cli\gl_branch.py -> build\lib\gitless\cli
copying gitless\cli\gl_checkout.py -> build\lib\gitless\cli
copying gitless\cli\gl_commit.py -> build\lib\gitless\cli
copying gitless\cli\gl_diff.py -> build\lib\gitless\cli
copying gitless\cli\gl_fuse.py -> build\lib\gitless\cli
copying gitless\cli\gl_history.py -> build\lib\gitless\cli
copying gitless\cli\gl_init.py -> build\lib\gitless\cli
copying gitless\cli\gl_merge.py -> build\lib\gitless\cli
copying gitless\cli\gl_publish.py -> build\lib\gitless\cli
copying gitless\cli\gl_remote.py -> build\lib\gitless\cli
copying gitless\cli\gl_resolve.py -> build\lib\gitless\cli
copying gitless\cli\gl_status.py -> build\lib\gitless\cli
copying gitless\cli\gl_switch.py -> build\lib\gitless\cli
copying gitless\cli\gl_tag.py -> build\lib\gitless\cli
copying gitless\cli\gl_track.py -> build\lib\gitless\cli
copying gitless\cli\gl_untrack.py -> build\lib\gitless\cli
copying gitless\cli\helpers.py -> build\lib\gitless\cli
copying gitless\cli\pprint.py -> build\lib\gitless\cli
copying gitless\cli\__init__.py -> build\lib\gitless\cli

(py38) C:\Users\Arne\Desktop\forks\gitless>pip install -e .
Obtaining file:///C:/Users/Arne/Desktop/forks/gitless
Collecting pygit2==1.2.0
  Downloading pygit2-1.2.0-cp38-cp38-win_amd64.whl (1.1 MB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 1.1 MB 1.7 MB/s
Collecting argcomplete>=1.11.1
  Downloading argcomplete-1.12.1-py2.py3-none-any.whl (38 kB)
Collecting cffi
  Downloading cffi-1.14.3-cp38-cp38-win_amd64.whl (179 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 179 kB 2.2 MB/s
Collecting cached-property
  Downloading cached_property-1.5.2-py2.py3-none-any.whl (7.6 kB)
Collecting pycparser
  Downloading pycparser-2.20-py2.py3-none-any.whl (112 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 112 kB 3.3 MB/s
Installing collected packages: pycparser, cffi, cached-property, pygit2, argcomplete, gitless
  Running setup.py develop for gitless
Successfully installed argcomplete-1.12.1 cached-property-1.5.2 cffi-1.14.3 gitless pycparser-2.20 pygit2-1.2.0

(py38) C:\Users\Arne\Desktop\forks\gitless>gl
Gitless: a version control system built on top of Git.
More info, downloads and documentation at http://gitless.com

commands:

    track               start tracking changes to files
    untrack             stop tracking changes to files
    status              show status of the repo
    diff                show changes to files
    commit              save changes to the local repository
    branch              list, create, delete, or edit branches
    tag                 list, create, or delete tags
    checkout            checkout committed versions of files
    merge               merge the divergent changes of one branch onto another
    resolve             mark files with conflicts as resolved
    fuse                fuse the divergent changes of a branch onto the current branch
    remote              list, create, edit or delete remotes
    publish             publish commits upstream
    switch              switch branches
    init                create an empty git repository or clone remote
    history             show commit history

(py38) C:\Users\Arne\Desktop\forks\gitless>gl status
On branch master, repo-directory //

Tracked files with modifications:
  โžœ these will be automatically considered for commit
  โžœ use gl untrack f if you don't want to track changes to file f
  โžœ if file f was committed before, use gl checkout f to discard local changes

    There are no tracked files with modifications to list


Untracked files:
  โžœ these won't be considered for commit
  โžœ use gl track f if you want to track changes to file f

    There are no untracked files to list