Compare commits
38 Commits
v0.0.1
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7f686e227f | ||
|
a2e3cd60ed
|
|||
| aa870623ff | |||
|
|
5937f8c918 | ||
| b9031579d6 | |||
| cccd31016e | |||
| 6d09eeaf99 | |||
| caa05f26f6 | |||
|
7ef5b154ea
|
|||
|
75260016c8
|
|||
|
93ed637537
|
|||
|
19d8a93f3f
|
|||
|
d000c7b0ee
|
|||
|
6fd42bea39
|
|||
|
7d70129495
|
|||
|
99bc7cb73e
|
|||
|
d4c2614d8e
|
|||
|
98873d8be2
|
|||
|
50f4015f30
|
|||
|
cb3ccbb4f6
|
|||
|
5e776f686b
|
|||
|
3c9a3f8168
|
|||
|
fdd72009b9
|
|||
|
3560e9f93b
|
|||
|
5e70f0da6b
|
|||
|
bf14a00b38
|
|||
|
3b1a55ea0a
|
|||
|
926b050a63
|
|||
|
7e8621f6b2
|
|||
|
e1b1b4a16a
|
|||
|
ec9ab4174b
|
|||
|
90cdb968bc
|
|||
|
461bd634a6
|
|||
|
533fe677de
|
|||
|
4788b5403b
|
|||
|
eee833f62e
|
|||
|
f305cdd7c3
|
|||
|
f38ef7dee3
|
97
.github/workflows/main.yml
vendored
Normal file
97
.github/workflows/main.yml
vendored
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
name: "Main"
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Lint
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: "14"
|
||||||
|
- run: /usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & echo "Started xvfb"
|
||||||
|
shell: bash
|
||||||
|
- run: npm install
|
||||||
|
- name: Cache node modules
|
||||||
|
uses: actions/cache@v2
|
||||||
|
env:
|
||||||
|
cache-name: cache-node-modules
|
||||||
|
with:
|
||||||
|
# npm cache files are stored in `~/.npm` on Linux/macOS
|
||||||
|
path: ~/.npm
|
||||||
|
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-build-${{ env.cache-name }}-
|
||||||
|
${{ runner.os }}-build-
|
||||||
|
${{ runner.os }}-
|
||||||
|
- run: npm run lint
|
||||||
|
env:
|
||||||
|
DISPLAY: ":99.0"
|
||||||
|
package:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: lint
|
||||||
|
name: Package
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: "14"
|
||||||
|
- run: npm install
|
||||||
|
- name: Cache node modules
|
||||||
|
uses: actions/cache@v2
|
||||||
|
env:
|
||||||
|
cache-name: cache-node-modules
|
||||||
|
with:
|
||||||
|
# npm cache files are stored in `~/.npm` on Linux/macOS
|
||||||
|
path: ~/.npm
|
||||||
|
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-build-${{ env.cache-name }}-
|
||||||
|
${{ runner.os }}-build-
|
||||||
|
${{ runner.os }}-
|
||||||
|
- run: npm install -g vsce
|
||||||
|
- run: vsce package
|
||||||
|
- run: echo "VSIX_PATH=$(find . -maxdepth 1 -type f -iname "*.vsix" | head -1)" >> $GITHUB_ENV
|
||||||
|
- run: echo "VSIX_NAME=$(basename $(find . -maxdepth 1 -type f -iname "*.vsix" | head -1))" >> $GITHUB_ENV
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
path: ${{ env.VSIX_PATH }}
|
||||||
|
name: ${{ env.VSIX_NAME }}
|
||||||
|
release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: package
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
VSCE_PAT: ${{ secrets.VSCE_PAT }}
|
||||||
|
DISPLAY: ":99.0"
|
||||||
|
name: Release
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: "14"
|
||||||
|
- run: /usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & echo "Started xvfb"
|
||||||
|
shell: bash
|
||||||
|
- run: npm install
|
||||||
|
- run: npm install -g vsce
|
||||||
|
- run: vsce package
|
||||||
|
- run: echo "VSIX_PATH=$(find . -maxdepth 1 -type f -iname "*.vsix" | head -1)" >> $GITHUB_ENV
|
||||||
|
- run: echo "VSIX_NAME=$(basename $(find . -maxdepth 1 -type f -iname "*.vsix" | head -1))" >> $GITHUB_ENV
|
||||||
|
- uses: actions/create-release@v1
|
||||||
|
id: create_release
|
||||||
|
with:
|
||||||
|
tag_name: ${{ github.ref }}
|
||||||
|
release_name: ${{ github.ref }}
|
||||||
|
body: See [CHANGE LOG](https://github.com/maksim77/gitcheck/blob/main/CHANGELOG.md) for details.
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
||||||
|
- uses: actions/upload-release-asset@v1
|
||||||
|
with:
|
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||||
|
asset_path: ${{ env.VSIX_PATH }}
|
||||||
|
asset_name: ${{ env.VSIX_NAME }}
|
||||||
|
asset_content_type: application/zip
|
||||||
|
- run: vsce publish
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
out
|
out
|
||||||
|
.vscode-test/
|
||||||
|
|||||||
25
CHANGELOG.md
25
CHANGELOG.md
@@ -1,5 +1,28 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
## [0.0.1]
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [v0.2.0] - 2021-12-10
|
||||||
|
### Fixed
|
||||||
|
-Fix async work with repository state
|
||||||
|
## [v0.1.1] - 2021-12-09
|
||||||
|
### Added
|
||||||
|
- icon
|
||||||
|
## [v0.1.0] - 2021-12-07
|
||||||
|
### Added
|
||||||
|
- Overwrite button in error message
|
||||||
|
|
||||||
|
## [v0.0.3] - 2021-12-07
|
||||||
|
### Fixed
|
||||||
|
- Small fixes
|
||||||
|
|
||||||
|
## [v0.0.2] - 2021-12-06
|
||||||
|
### Added
|
||||||
|
- README 😂
|
||||||
|
### Changed
|
||||||
|
- Rename `user` => `name` in settings options
|
||||||
|
|
||||||
|
## [v0.0.1] - 2021-12-06
|
||||||
- Initial release
|
- Initial release
|
||||||
10
README.md
10
README.md
@@ -1 +1,9 @@
|
|||||||
# gitcheck
|
# Git User Check
|
||||||
|
|
||||||
|
Sometimes, after cloning a repository from a corporate server and having already sent several commits there, you notice that you forgot to change the user settings in git.
|
||||||
|
This extension is written to avoid this.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
* `gitcheck.domain` – The domain (or just a substring) for which the check will be performed (you can see in the output of the command `git remote -v`).
|
||||||
|
* `gitcheck.name` – This value will be checked against the value of the git parameter `user.name`.
|
||||||
|
* `gitcheck.email` – This value will be checked against the value of the git parameter `user.email`.
|
||||||
BIN
media/folder-green-git-icon.png
Normal file
BIN
media/folder-green-git-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.7 KiB |
1240
package-lock.json
generated
1240
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
25
package.json
25
package.json
@@ -2,8 +2,8 @@
|
|||||||
"name": "gitcheck",
|
"name": "gitcheck",
|
||||||
"displayName": "Git User Check",
|
"displayName": "Git User Check",
|
||||||
"description": "Checking the user's compliance with the repository",
|
"description": "Checking the user's compliance with the repository",
|
||||||
"version": "0.0.1",
|
"version": "0.2.2",
|
||||||
"preview": true,
|
"preview": false,
|
||||||
"engines": {
|
"engines": {
|
||||||
"vscode": "^1.62.0"
|
"vscode": "^1.62.0"
|
||||||
},
|
},
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/maksim77/gitcheck.git"
|
"url": "https://github.com/maksim77/gitcheck.git"
|
||||||
},
|
},
|
||||||
|
"icon": "media/folder-green-git-icon.png",
|
||||||
"activationEvents": [
|
"activationEvents": [
|
||||||
"workspaceContains:.git/"
|
"workspaceContains:.git/"
|
||||||
],
|
],
|
||||||
@@ -27,21 +28,21 @@
|
|||||||
],
|
],
|
||||||
"main": "./out/extension.js",
|
"main": "./out/extension.js",
|
||||||
"contributes": {
|
"contributes": {
|
||||||
"configuration":[
|
"configuration": [
|
||||||
{
|
{
|
||||||
"title": "Git User Check",
|
"title": "Git User Check",
|
||||||
"properties": {
|
"properties": {
|
||||||
"gitcheck.domain": {
|
"gitcheck.domain": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "remote domain for check"
|
"description": "Remote domain for check"
|
||||||
},
|
},
|
||||||
"gitcheck.user": {
|
"gitcheck.name": {
|
||||||
"type":"string",
|
"type": "string",
|
||||||
"description": "Username for gitcheck domain"
|
"description": "user.name for gitcheck domain"
|
||||||
},
|
},
|
||||||
"gitcheck.email": {
|
"gitcheck.email": {
|
||||||
"type":"string",
|
"type": "string",
|
||||||
"description": "Email for gitcheck domain"
|
"description": "user.email for gitcheck domain"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -56,16 +57,16 @@
|
|||||||
"test": "node ./out/test/runTest.js"
|
"test": "node ./out/test/runTest.js"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/vscode": "^1.62.0",
|
|
||||||
"@types/glob": "^7.1.4",
|
"@types/glob": "^7.1.4",
|
||||||
"@types/mocha": "^9.0.0",
|
"@types/mocha": "^9.0.0",
|
||||||
"@types/node": "14.17.27",
|
"@types/node": "14.17.27",
|
||||||
|
"@types/vscode": "^1.62.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.1.0",
|
"@typescript-eslint/eslint-plugin": "^5.1.0",
|
||||||
"@typescript-eslint/parser": "^5.1.0",
|
"@typescript-eslint/parser": "^5.1.0",
|
||||||
|
"@vscode/test-electron": "^1.6.2",
|
||||||
"eslint": "^8.1.0",
|
"eslint": "^8.1.0",
|
||||||
"glob": "^7.1.7",
|
"glob": "^7.1.7",
|
||||||
"mocha": "^9.1.3",
|
"mocha": "^9.1.3",
|
||||||
"typescript": "^4.4.4",
|
"typescript": "^4.4.4"
|
||||||
"@vscode/test-electron": "^1.6.2"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +1,91 @@
|
|||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
import { GitExtension } from './git';
|
import { GitExtension, Repository } from './git';
|
||||||
|
|
||||||
export function activate() {
|
class UserConf {
|
||||||
|
domain: string = "";
|
||||||
|
name: string = "";
|
||||||
|
email:string = "";
|
||||||
|
|
||||||
|
valid: boolean = false;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
var conf = vscode.workspace.getConfiguration("gitcheck");
|
var conf = vscode.workspace.getConfiguration("gitcheck");
|
||||||
const domain = conf.get<string>("domain");
|
const _domain = conf.get<string>("domain");
|
||||||
const user = conf.get<string>("user");
|
const _name = conf.get<string>("name");
|
||||||
const email = conf.get<string>("email");
|
const _email = conf.get<string>("email");
|
||||||
|
if (!(_domain && _name && _email)) {
|
||||||
if (!(domain && user && email)) {
|
|
||||||
console.log("Missing config params");
|
console.log("Missing config params");
|
||||||
|
this.valid = false;
|
||||||
|
} else {
|
||||||
|
this.domain = _domain;
|
||||||
|
this.name = _name;
|
||||||
|
this.email = _email;
|
||||||
|
this.valid = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function activate() {
|
||||||
|
const userConf = new UserConf();
|
||||||
|
if (!userConf.valid) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const git = vscode.extensions.getExtension<GitExtension>('vscode.git')!.exports.getAPI(1)!;
|
if (!vscode.workspace.workspaceFolders) {
|
||||||
const repository = git.repositories[0];
|
console.log("No opened workspace");
|
||||||
repository.state.remotes.forEach(async remote => {
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const gitExt = vscode.extensions.getExtension<GitExtension>('vscode.git')!;
|
||||||
|
const git = gitExt.exports.getAPI(1);
|
||||||
|
if (!git) {
|
||||||
|
console.log("Git extension disabled");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const repository = await git.openRepository(vscode.workspace.workspaceFolders[0].uri);
|
||||||
|
if (!repository) {
|
||||||
|
console.error("Cannot open git repository");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let remotesLen:number = 0;
|
||||||
|
repository.state.onDidChange(() => {
|
||||||
|
if (remotesLen > 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
remotesLen = repository.state.remotes.length;
|
||||||
|
|
||||||
|
if (remotesLen > 0) {
|
||||||
|
gitCheck(repository, userConf);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function gitCheck(repo:Repository, conf:UserConf) {
|
||||||
|
repo.state.remotes.forEach(async remote => {
|
||||||
const pushUrl = remote.pushUrl;
|
const pushUrl = remote.pushUrl;
|
||||||
if (pushUrl && pushUrl.includes(domain)) {
|
if (pushUrl && pushUrl.includes(conf.domain)) {
|
||||||
var gitConfig = await repository.getConfigs();
|
var gitConfig = await repo.getConfigs();
|
||||||
var gitUser:string = "";
|
var gitName:string = "";
|
||||||
var gitEmail:string = "";
|
var gitEmail:string = "";
|
||||||
gitConfig = gitConfig.filter( elem => {
|
gitConfig = gitConfig.filter( elem => {
|
||||||
return elem.key === "user.name" || elem.key === "user.email";
|
return elem.key === "user.name" || elem.key === "user.email";
|
||||||
});
|
});
|
||||||
if (gitConfig.length === 0) {
|
if (gitConfig.length === 0) {
|
||||||
vscode.window.showErrorMessage("Missing user creds in git");
|
console.error("Missing user creds in git");
|
||||||
|
const option = await vscode.window.showErrorMessage("Missing user settings in git", "Overwrite");
|
||||||
|
if (option && option === "Overwrite") {
|
||||||
|
await repo.setConfig("user.name", conf.name);
|
||||||
|
await repo.setConfig("user.email", conf.email);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gitConfig.forEach(c => {
|
gitConfig.forEach(c => {
|
||||||
switch (c.key) {
|
switch (c.key) {
|
||||||
case "user.name":
|
case "user.name":
|
||||||
gitUser = c.value;
|
gitName = c.value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "user.email":
|
case "user.email":
|
||||||
@@ -38,11 +93,16 @@ export function activate() {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
console.log(c.key);
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (gitUser !== user || gitEmail !== email) {
|
if (gitName !== conf.name || gitEmail !== conf.email) {
|
||||||
vscode.window.showErrorMessage("Wrong user creds in git");
|
console.error("Wrong user settings in git");
|
||||||
|
const option = await vscode.window.showErrorMessage("Wrong user settings in git", "Overwrite");
|
||||||
|
if (option && option === "Overwrite") {
|
||||||
|
await repo.setConfig("user.name", conf.name);
|
||||||
|
await repo.setConfig("user.email", conf.email);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user