repos-tool 0.1.4

A simple command line tool to manage local repositories.
Documentation
# repos

A simple command line tool to manage local repositories.

## Notes

* Metadata file is managed by user self manually

  The metadata of local repository should be managed by user self manually.
  The `repos` command line tool only reads the metadata for operations and never modifies it.

  Please take a look at https://github.com/toml-lang/toml to get a quick introduction of toml format.

* Vcs support is done by spawning vcs process

  Currently, the `repos` command line tool calls vcs process for synchronizing repositories.

  Please make sure to put vcs command line programs in the path environment before using `repos` command line to synchronizing repositories.

## Building

First, install Rust https://www.rust-lang.org/install.html .

Then,

```sh
cargo build --release
```

Copy the built
`target/release/repos` (`target\release\repos.exe` in Windows)
command line executable program to any place for use.

## Tutorials

### Prepare your metadata file

See `Repos.sample.toml` for sample.

To use the sample metadata file, just copy it to the root directory of your repositories and rename it to `Repos.toml`.

### Add a new repository

1. Put new repository metadata to `Repos.toml`
2. Run `repos sync {repo_url}`

### Update an existed repository

Run `repos sync {repo_url}`.

### Remove an existed repository

1. Run `repos remove {repo_url}`
2. Delete repository metadata from `Repos.toml` manually

### Update all repositories

Run `repos sync`.

### List repositories of a topic

Run `repos topic {topic}`.

### List all topics with count of their repositories

Run `repos topics`.

### Output stats of all repositories

Run `repos stats`.

###  Clean up unused resources

Run `repos cleanup`.

### Search repositories

Run `repos search {keyword}`.

### Output proxy configuration

Run `repos proxy`.

### Change proxy configuration

Edit `proxy` section in metadata file.

## Metadata

See `Repos.template.toml` for an overview.

### repository

- `url`: follow usage of vcs
- `vcs`: version control system. choices: git, hg
- `allow_sync`: whether synchronized to local, or just marked in metadata
- `bare`: whether bare
- `use_proxy`: whether using proxy for sync
- `topics`: topics belong to

### proxy

- `scheme`: choices: http, socks5
- `host`
- `port`

## Local files and directories

These files and directories are all in current/working directory (`pwd`).

### Metadata file

`Repos.toml`

### repository directory

`{host}/{path_to_repo}`

e.g. repository directory of url `https://example.com/org/repo.git` is `example.com/org/repo`.

## Subcommands

* `sync`: update or clone if a repository url provided, else synchronize all repositories
* `remove`: remove local directory of a repository
* `topics`: list all topics with count of their repositories
* `topic`: list repositories of a topic
* `stats`: output stats of all repositories
* `cleanup`: clean up unused resources
* `search`: search repositories by keyword
* `proxy`: output proxy configuration

Examples:

```
repos sync https://github.com/org/repo.git
repos sync
repos remove https://github.com/org/repo.git
repos topics
repos topic rust
repos stats
repos cleanup
repos search keyword
repos proxy
```

## Limitations

There are some limitations now.

* Relative URLs without base (scp-like syntax) are not supported.

  e.g. `[user@]host.xz:path/to/repo.git` or `[user@]host.xz:~/path/to/repo.git`

* The `bare` attribute of a repository is only used for cloning the repository.
* Proxy configuration is global. This may be changed in the future.
* Vcs only supports git and hg(Mercurial) now.