Coder Social home page Coder Social logo

repoload's Introduction

Repoload - a change request download tool

repoload is a commandline tool, written in python3, that should make your life and daily work with the repo tool and the gerrit review system more pleasant.

repoload has currently only a very limited set of functionalities and a lot of TODOS in the code, but it's already useful. The possibility to download multiple CRs (Change Requests) by naming the crossrepo topic is the must-have feature, because it's not supported by repo itself.

The full feature list is:

  • Query gerrit for open CRs
  • Query gerrit for open topic names
  • Download a CR or multiple CRs linked by a topic at once.

It also works with gerrit using the autosubmitter plugin.

Usage

Before using repoload you have to install the script and configure the gerrit server URL. See below.

The primary use case of repoload is to easily checkout crossrepo/ CRs (Change Requests) from gerrit.

Example:

 # Change directory into the repo checkout
 $ cd to/repo/checkout

 # Bring your repo checkout into a consistent state
 # Beware: 'repo sync' maybe drops your local modifications without a warning
 # Backup your code changes!
 $ repo sync

 # Query the gerrit server for open CRs
 # You can use `grep` to filter for your coworker's CRs
 $ repoload changes | grep -i john
 123: Add feature A (John Doe <[email protected]>) [topic: crossrepo/feature-a]
 128: Update library for feature A (John Doe <[email protected]>) [topic: crossrepo/feature-a]
 [...]

 # For downloading all CRs linked by a topic, just use the topic name
 $ repoload download crossrepo/feature-a

 # For downloading only a single CR, use the CR number
 $ repoload download 123

 # Build, test and have fun.

All repoload commands have an abbreviation:

 $ repoload c     # for 'changes'
 $ repoload t     # for 'topics'
 $ repoload d     # for 'download'

For further information see:

 $ repoload --help
 $ repoload download --help    # and so forth

Installation

The installation of repoload is possible over PyPI or by directly using the python script.

PyPI:

$ python3 -m pip install --user repoload

To manually install the self contained repoload.py python script. Just drop the file in a folder that your environment variable PATH references.

Example:

$ mkdir -p ~/bin
$ cp repoload/repoload.py ~/bin/repoload
$ echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
$ chmod +x ~/bin/repoload  # ensure that the script is executeable

After that the command repoload should be available in a newly started shell and the command

$ repoload changes

should print a list of open change requests.

Repoload looks for the manifest repository configuration file to determine the URL of the Gerrit server. It works automatically if the current working directory is below a repo checkout. Alternatively, the environment variable ANDROID_BUILD_TOP can be set to the directory where a repo checkout is located. Finally, the URL can be set directly via the environment variable GERRIT_URL.

FAQ - Frequently Asked Questions

Non-UTF8 locale

If you execute repoload with a non UTF8 locale, the program may abort with a python UnicodeEncodeError exception. Example:

$ LC_ALL=C repoload c
[...]
Traceback (most recent call last):
  File "/home/johndoe/.local/bin/repoload", line 11, in <module>
    sys.exit(main())
  File "/home/johndoe/.local/lib/python3.6/site-packages/repoload/repoload.py", line 252, in main
    ret = args.func(args)
  File "/home/johndoe/.local/lib/python3.6/site-packages/repoload/repoload.py", line 122, in print_open_changes
    print("%d: %s (%s)%s" % (cr.get('number'), cr.get('subject'), author, topic_str))
UnicodeEncodeError: 'ascii' codec can't encode character '\xe4' in position 70: ordinal not in range(128)

The reason are non-ASCII characters, e.g. in the author or topic field, that cannot be printed to the terminal, if the locale is non-UTF8. The current workaround is to not use repoload with non-UTF8 character sets.

It's planned to fix this issue in the next version of repoload.

License

The code is licensed under the MIT License. See the file COPYING.

Contribution

The project is open for contribution. Open a github pull request or send a patch via email. If you take the patch route, you can find our mail addresses in the git history easily.

Please add a Signed-off-by tag in the commit/patch message to state the copyright ownership and license information of your patch. Read Developer Certificate of Origin v1.1 to understand the meaning and obligations your are taking by adding your sign-off. Thanks in advance.

Create and publish a release

To create a release of repoload additional packaging dependency's are needed:

$ python3 -m pip install --user --upgrade twine setuptools wheel

Next the release which is described in the setup.py file gets packaged. The version number is taken from the repoload/repoload.py __VERSION__ string.

$ python3 setup.py sdist bdist_wheel

As final step the release can be uploaded to PyPI. See the PyPI documentation on how to configure the credentials for twine.

$ python3 -m twine upload dist/*

repoload's People

Contributors

flimberger avatar ddaze avatar lengfeld avatar

Stargazers

Jeferson Barros avatar  avatar Dominik Helleberg avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

ddaze flimberger

repoload's Issues

Feature request

Allow to pass arguments to repo download. Should be possible to use repo download --cherry-pick

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.