repo-tools
Version:
Useful commands to work with remote repositories
44 lines (40 loc) • 1.52 kB
text/typescript
import { green, red, yellow } from 'kolorist';
import { run } from '../helpers';
export const command = 'check-remote';
export const describe = 'Check if repo has remote commits';
export const handler = (): Promise<void> =>
run('git rev-parse --is-inside-work-tree')
.then(() =>
run('git ls-remote --exit-code --heads')
.then(() =>
Promise.all([
run('git rev-parse @'),
run('git rev-parse @{u}'),
run('git merge-base @ @{u}'),
])
.then(values => {
const [{ stdout: $local }, { stdout: $remote }, { stdout: $base }] = values;
if ($local === $remote) {
console.log(green('✔ Repo is up-to-date!'));
} else if ($local === $base) {
console.log(red('⊘ You need to pull, there are new commits.'));
process.exit(1);
}
})
.catch(error => {
if (error.message.includes('no upstream configured ')) {
console.log(yellow('⚠ No upstream'));
} else if (error.message.includes("fatal: ambiguous argument '@'")) {
console.log(yellow('⚠ No local commits'));
} else {
console.log(yellow(`⚠ Warning: ${error.message}`));
}
}),
)
.catch(() => {
console.log(yellow(`⚠ No remote`));
}),
)
.catch(() => {
console.log(yellow('⚠ not under git'));
});