https://github.com/shlomiassaf/git-repo-watch
A node utility to sync git repositories and get notifications using RxJS.
https://github.com/shlomiassaf/git-repo-watch
Last synced: 3 months ago
JSON representation
A node utility to sync git repositories and get notifications using RxJS.
- Host: GitHub
- URL: https://github.com/shlomiassaf/git-repo-watch
- Owner: shlomiassaf
- Created: 2016-12-25T00:06:11.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2016-12-25T00:17:41.000Z (almost 9 years ago)
- Last Synced: 2025-06-13T09:43:44.154Z (4 months ago)
- Language: TypeScript
- Size: 15.6 KB
- Stars: 2
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# git-repo-watch
A node utility to sync git repositories and get notifications using RxJS.
`npm install git-repo-watch`There are 2 operations modes:
- **Sync** (simple `git pull`)
- **Sync Fork** (pull source remote -> rebase -> push fork remote)###Sync
The **Sync** method is straight forward, you have a git repository with 1 remote.###Sync Fork
The **Sync Fork** method is used when you have a remote that was forked and you want to get notified when the fork changes and sync the 2.>It is usually referred to as **origin** and **upstream**.
Example:
This is the material2 repository: `https://github.com/angular/material2`Forking it to my own github account: `https://github.com/shlomiassaf/material2`
Running `git remote -v`:
```
origin https://github.com/shlomiassaf/material2.git (fetch)
upstream https://github.com/angular/material2.git (fetch)
```The **origin** remote is my fork, the **upstream** remote is the source for updates.
### API
The `GitWatcher` class is used to watch repositories.```
import { GitWatcher } from 'git-repo-watch'// TypeScript:
// import { GitWatcher, RepoResult } from './src';const watcher = new GitWatcher();
```#### GitWatcher
- **watch(info: RepoWatchConfig): void**
Start watching a repository.
- unwatch(info: RepoWatchConfig): void
Stop watching a repository
- check$: Observable
Notification stream triggered before a git repository starts a sync check.
- result$: Observable
Notification stream triggered after a git repository sync check as ended.#### RepoWatchConfig
- **path: string**
The file system path where the repository is.
- **poll: number**
The time in seconds between each check
Optional, Default: 1 hour
- **remote: string**
The remote name to sync in **sync** mode
In **Sync Fork** mode this is the fork to update to.
Optional, Default: origin
- **branch: string**
The branch name to sync in **sync** mode
In **Sync Fork** mode this is the fork to update to.
Optional, Default: master- **strict: boolean**
Run only if the current branch matches the branch defined.
- **sync**
Sync Fork mode definition, sync a remote branch into the origin branch.
i.e: Pulling an "upstream" remote "master" into the "origin" master.
Optional, Default: undefined (sync mode)
- **remote: string**
The remote name to pull from
e.g: upstream
- **branch: string**
The branch name to pull from
e.g: master- **rebase: boolean**
If true rebase is used (rebasing from upstream), otherwise a merge
Optional, Default: false
- **push?: boolean**
If true, push the changes to the forked remote (origin)
Optional, Default: false
}
####RepoResult
- **config: RepoWatchConfig**
The config object for this instance.
- **error: Error**
If an error occurred this will be the Error object.
- **changed: boolean**
True if the pull was different, i.e: the source repo was updated.
Irrelevant when an error has occurred.## Example (TypeScript)
```ts
import { GitWatcher, RepoResult } from './src';const gw = new GitWatcher();
// Use Sync Fork to check for changes in the upstream an update.
gw.watch({
path: '/repos/forks/material2',
remote: 'origin',
branch: 'master',
strict: true,
sync: {
remote: 'upstream',
branch: 'master',
rebase: true,
push: true
}
});gw.check$.subscribe( info => {
// will fire every check.
});gw.result$.subscribe( (result: RepoResult) => {
// will fire once a check is finished.
// When using Sync Fork the origin is now updated (and local ofcourse)
if (result.error) {
gw.unwatch(result.config);
// don't forget to unsubscrive...
} else {
if (result.checked === true) {
// new version, we can build it, publish to a site... whatever.
}
}
});
```