Before that, let's setup the Python's Virtual Environment.
$ cd /tmp $ mkdir pyvim mkdir: created directory ‘pyvim’ $ cd pyvim/ $ virtualenv -p /usr/bin/python2.7 venv Running virtualenv with interpreter /usr/bin/python2.7 New python executable in venv/bin/python2.7 Also creating executable in venv/bin/python Installing setuptools, pip...done. $ source venv/bin/activate (venv)$ which python /tmp/pyvim/venv/bin/python
Clone the PyVim Git repository with the folder and the Virtual Environment you've created in previous step.
(venv)$ git clone https://github.com/jonathanslenders/pyvim.git Cloning into 'pyvim'... remote: Counting objects: 196, done. remote: Compressing objects: 100% (51/51), done. remote: Total 196 (delta 29), reused 0 (delta 0), pack-reused 143 Receiving objects: 100% (196/196), 597.72 KiB | 165.00 KiB/s, done. Resolving deltas: 100% (93/93), done. Checking connectivity... done.
You'll obtain below directory structure.
(venv)$ tree -L 2 . ├── pyvim │ ├── CHANGELOG │ ├── docs │ ├── examples │ ├── LICENSE │ ├── pyvim │ ├── README.rst │ ├── setup.py │ └── tests └── venv ├── bin ├── include ├── lib └── lib64 -> lib 10 directories, 4 files
Next, install latest PyVim and all the necessary Python packages within the Virtual Environment.
(venv)$ cd pyvim $ python setup.py install ...... Finished processing dependencies for pyvim==0.0.2
Run the PyVim program and the output below shows that there is breakage with the latest committed version.
(venv)$ pyvim --help Traceback (most recent call last): File "/tmp/pyvim/venv/bin/pyvim", line 9, in
load_entry_point('pyvim==0.0.2', 'console_scripts', 'pyvim')() File "/tmp/pyvim/venv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 519, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/tmp/pyvim/venv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2630, in load_entry_point return ep.load() File "/tmp/pyvim/venv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2310, in load return self.resolve() File "/tmp/pyvim/venv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2316, in resolve module = __import__(self.module_name, fromlist=['__name__'], level=0) File "/tmp/pyvim/venv/lib/python2.7/site-packages/pyvim-0.0.2-py2.7.egg/pyvim/entry_points/run_pyvim.py", line 17, in File "/tmp/pyvim/venv/lib/python2.7/site-packages/pyvim-0.0.2-py2.7.egg/pyvim/editor.py", line 27, in File "/tmp/pyvim/venv/lib/python2.7/site-packages/pyvim-0.0.2-py2.7.egg/pyvim/layout.py", line 17, in ImportError: No module named reactive
Let's find any tagged stable working versions but it seems that the author does not create any tagged branch.
(venv)$ git tag (venv)$
Since there is not tagged branch, then we'll need to find out the hash of the last stable commit. In our case here, is version 0.0.2. Results as shown using the git log command with summarized output.
(venv)$ git log --oneline --decorate | cut -c -80 1ec47f1 (HEAD, origin/master, origin/HEAD, master) Command functions rename d842f06 add docopt to install_requires in setup.py 1fdd937 Override ControlT from prompt-toolkit: don't swap characters before curs c944a28 Implemented the :cq command. eaa4b1e Fix: use accepts_force also for bw/bd 4920b74 Added :bd as keybinding to buffer close f179bd6 Implemented scroll offset. 6c160ce Show 'No \! allowed' when used for commands not supporting it. b1d9813 Fix python 3/2 compatibility for urllib. 892188c Fixed typo in README.txt 2409ad7 Some rephrasing in the README. 40cfe66 Reload option for :edit and :open 9bb4975 Added ':open' as an alias for ':edit'. e33db19 Added ':h' alias for ':help' a010ea8 Implemented ControlD and ControlU key bindings, for scrolling half a pag 39c72b1 Implemented ControlE and ControlY key bindings ad880c1 Auto closes new/empty buffers when they are hidden. This solves the :q i 082ce60 Added accept_force parameter to commands decorator. 'bp'/'bn' now also a dfed3a3 Fix a bug where a user could leave a buffer with unsaved changes by issu 1ff1bac fix ctrl-f shortcut 5369f5d Abstraction of I/O backends. Now it is possible to open .gz files and ht 75d3a3b Mention alternatives in README.rst 10dcb2d Added ControlW n/v key bindings for splitting windows. d13f5e6 Added PageUp/PageDown key bindings. 4009f8b New screenshot for cjk characters. 34b6175 Fixed NameErrors in .pyvimrc example. cc0b333 Adding shorthands for split and vsplit 78c2225 Pypi release 0.0.2 -- (0.0.1 release failed) 5083d0b Pypy release 0.0.1 df71609 Usable pyvim version. - Layouts: horizontal/vertical splits + tabs. - Ma fb129f5 Initial ptvim version. a60a0b6 Initial commit
From the result above, commit hash id 78c2225 is the first public release version. Let's switch our HEAD to that commit.
(venv)$ git checkout 78c2225 Note: checking out '78c2225'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD is now at 78c2225... Pypi release 0.0.2 -- (0.0.1 release failed)
Re-install and re-run the program again. It seemed this committed version work without any issues.
(venv)$ python setup.py install (venv)$ pyvim --help pyvim: Pure Python Vim clone. Usage: pyvim [-p] [-o] [-O] [-u
] [ ...] Options: -p : Open files in tab pages. -o : Split horizontally. -O : Split vertically. -u : Use this .pyvimrc file instead.
To reset back the HEAD back to the origin/master.
(venv) $ git reset --hard origin/master HEAD is now at 1ec47f1 Command functions rename
Confirm we're at the latest HEAD through git log command.
(venv) $ git log --oneline --decorate -1 1ec47f1 (HEAD, origin/master, origin/HEAD, master) Command functions rename
Instead of searching through the log, we can tag particular commit.
(venv)$ git tag -a v0.0.2 -m "Release 0.0.2" 78c2225
Let's check again throught the git log and git tag command.
(venv) $ git log --oneline --decorate | grep 'HEAD\|tag' 1ec47f1 (HEAD, origin/master, origin/HEAD, master) Command functions rename 78c2225 (tag: v0.0.2) Pypi release 0.0.2 -- (0.0.1 release failed) $ git tag v0.0.2
Instead of switching to particular commit hash id, we can switch directly by using tag name.
$ git checkout v0.0.2 Previous HEAD position was 1ec47f1... Command functions rename HEAD is now at 78c2225... Pypi release 0.0.2 -- (0.0.1 release failed) $ git status HEAD detached at v0.0.2 nothing to commit, working directory clean