Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Add a bash-completion script #22

Open
aleksejrs opened this Issue · 6 comments

3 participants

@aleksejrs

mozdownload has multiple command line switches, some of which are only available in the long form.
mozdownload also has 43-line help output.

bash-completion allows for auto-completion of command line options of a program when using bash or zsh. For example, git provides a 56-kilobyte description of completion in Debian (most auto-completion scripts are only a couple kilobytes though). With it, you can enter “mozdownload --”, press Tab, and see a concise list of all the available long switches; or you can enter also a couple of letters of a switch and press Tab and have that switch completed.

Most of the auto-completion scripts are written in bash itself, but there is a Perl support script, and at least one program to generate one based on Python's optparse syntax (possibly supporting or ported to argparse).

@jayrajput
Collaborator

I found this from http://www.joshmatthews.net/bugsahoy/?sh=1. I see that python optcomplete module can be used to provide automatic completion. I have forked the repo and making the changes.

Description of planned changes (Let me know if you see any issues)

  • Update setup.py to add dependency on the optcomplete python package (https://pypi.python.org/pypi/optcomplete)
  • Update code in scrapper.py to use optcomplete as suggested by optcomplete documentation.

After these two changes, user has to follow the optcomplete documentation to source a bash function and then to tell Bash to trigger optcomplete completion for the specific programs that use it:

complete -F _optcomplete <program>

Python also has argparse and argcomplete. But the Option Group is not so straightforward (atleast to me) in the argparse. The scrapper.py is using Option Group for different build (candidate, daily and tinderbox) options.

I will be doing manual testing on zsh and bash for the auto-completion of two or more options. I will also run the automated tests and make sure that they pass.

@jayrajput
Collaborator

I ended up not using optcomplete. During changes, I realized it is too much for just the simple cli switches completion.

I ended up updating the scrapper.py to provide all the options when called with the environment containing _MOZDOWNLOADARGCOMPLETE. This is the same strategy which optcomplete and argcomplete use.

I also added a bash_completion.d/python-mozdownload.sh which provides the bash completion. This is similar to argcomplete bash_completion.d file. The addition of new file needed updates in the setup.py to include package_data.

I have all the changes done in my fork. I have manually tested auto-completion in bash and it works fine. I also ran the tests using run_test.py and they worked as well.

How do I go about getting the changes reviewed and then eventually make them to this repo to get this issue fixed?

@jayrajput
Collaborator

code is available for review. Please see the pull request.

@jayrajput jayrajput referenced this issue from a commit
@jayrajput jayrajput Removed changes for #22 98974b7
@jayrajput jayrajput was assigned by whimboo
@whimboo
Owner

Good to see that you picked that issue Jay! I will get to it soon. For now I will make you the assignee.

@whimboo
Owner

The referenced PR #221 was the mixture with another PR. So after talking to Jay he split out the code for this issue. So I will wait for the next PR you are opening.

@whimboo whimboo added the blocked label
@whimboo
Owner

An implementation here would be blocked by issue #269.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.