1
1
mirror of https://github.com/kahole/edamagit.git synced 2024-10-26 09:00:54 +03:00

Compare commits

...

5 Commits

Author SHA1 Message Date
kahole
375b40146d fix dependency conflict 2023-03-01 10:44:43 +01:00
kahole
ed502d9e32 Switch from --preserve-merges to newer --rebase-merges (fixes #242) 2023-03-01 10:33:48 +01:00
kahole
684939f464 upgrade dependencies and changelog 2023-03-01 10:31:41 +01:00
Kristian Andersen Hole
7f59123fc1
Merge pull request #246 from unexge/use-new-refs-api
Use new `repository.getRefs()` instead of `repository.state.refs`
2023-03-01 10:15:21 +01:00
unexge
de50ff3619 Use new repository.getRefs() instead of repository.state.refs
`repository.state.refs` is deprecated as part of
https://github.com/microsoft/vscode/issues/170838
2023-02-28 23:22:20 +00:00
11 changed files with 1361 additions and 1584 deletions

View File

@ -11,7 +11,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
node-version: 18
- run: npm ci
- name: Publish to Open VSX Registry
uses: HaaLeo/publish-vscode-extension@v1

View File

@ -16,7 +16,7 @@ jobs:
strategy:
matrix:
node-version: [14.x]
node-version: [18.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:

View File

@ -1,5 +1,11 @@
# Changelog
## [0.6.38]
## [0.6.37] - 2023-03-01
- Switch from `--preserve-merges` to newer `--rebase-merges` in rebasing options
- Upgrade to newer refs api to fix breakage on coming VSCode versions (Burak @unexge)
- Upgrade dependencies
## [0.6.36] - 2022-12-07
- Make forge status fully async as to not block the git status buffer
- Move away from private vscode APIs that are to be removed soon

2831
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@
"author": {
"name": "Kristian Andersen Hole"
},
"version": "0.6.36",
"version": "0.6.38",
"engines": {
"vscode": "^1.50.0"
},
@ -37,38 +37,6 @@
}
},
"activationEvents": [
"onCommand:magit.status",
"onCommand:magit.dispatch",
"onCommand:magit.commit",
"onCommand:magit.branching",
"onCommand:magit.merging",
"onCommand:magit.rebasing",
"onCommand:magit.resetting",
"onCommand:magit.pushing",
"onCommand:magit.pulling",
"onCommand:magit.remoting",
"onCommand:magit.logging",
"onCommand:magit.show-refs",
"onCommand:magit.diffing",
"onCommand:magit.tagging",
"onCommand:magit.cherry-picking",
"onCommand:magit.reverting",
"onCommand:magit.ignoring",
"onCommand:magit.running",
"onCommand:magit.worktree",
"onCommand:magit.help",
"onCommand:magit.stashing",
"onCommand:magit.submodules",
"onCommand:magit.fetching",
"onCommand:magit.process-log",
"onCommand:magit.file-popup",
"onCommand:magit.blame-file",
"onCommand:magit.diff-file",
"onCommand:magit.log-file",
"onCommand:magit.stage-file",
"onCommand:magit.stage-all",
"onCommand:magit.unstage-file",
"onCommand:magit.unstage-all",
"onCommand:magit.save-and-close-editor",
"onCommand:magit.clear-and-abort-editor"
],
@ -737,20 +705,20 @@
"devDependencies": {
"@types/glob": "^7.1.3",
"@types/mocha": "^8.2.0",
"@types/node": "^14.14.14",
"@types/node": "^18.14.2",
"@types/vscode": "^1.50.0",
"@types/which": "^2.0.1",
"@typescript-eslint/eslint-plugin": "^4.10.0",
"@typescript-eslint/parser": "^4.10.0",
"@typescript-eslint/eslint-plugin": "^5.54.0",
"@typescript-eslint/parser": "^5.54.0",
"eslint": "^7.16.0",
"eslint-loader": "^4.0.2",
"glob": "^7.1.6",
"mocha": "^10.1.0",
"ts-loader": "^8.0.12",
"typescript": "^4.1.3",
"ts-loader": "^9.4.2",
"typescript": "^4.9.5",
"vscode-test": "^1.4.1",
"webpack": "^5.11.0",
"webpack-cli": "^4.2.0"
"webpack": "^5.75.0",
"webpack-cli": "^5.0.1"
},
"dependencies": {
"@vscode/iconv-lite-umd": "^0.7.0",

View File

@ -116,7 +116,7 @@ async function deleteBranch({ repository }: MenuState) {
if (ref) {
try {
await gitRun(repository.gitRepository, ['branch', '--delete', ref]);
} catch (error) {
} catch (error: any) {
if (error.gitErrorCode === GitErrorCodes.BranchNotFullyMerged) {
if (await MagitUtils.confirmAction(`Delete unmerged branch ${ref}?`)) {
return await gitRun(repository.gitRepository, ['branch', '--delete', '--force', ref]);

View File

@ -118,7 +118,7 @@ async function discard(repository: MagitRepository, selection: Selection, select
if (await MagitUtils.confirmAction(`Delete branch ${branch.name}?`)) {
try {
await gitRun(repository.gitRepository, ['branch', '--delete', branch.name]);
} catch (error) {
} catch (error: any) {
if (error.gitErrorCode === GitErrorCodes.BranchNotFullyMerged) {
if (await MagitUtils.confirmAction(`Delete unmerged branch ${branch.name}?`)) {
return gitRun(repository.gitRepository, ['branch', '--delete', '--force', branch.name]);
@ -137,7 +137,7 @@ async function discard(repository: MagitRepository, selection: Selection, select
if (await MagitUtils.confirmAction(`Delete branch ${branch.name} at REMOTE ${remote} (push --delete)?`)) {
try {
await gitRun(repository.gitRepository, ['push', '--delete', remote, name]);
} catch (error) {
} catch (error: any) {
if (error.gitErrorCode === GitErrorCodes.BranchNotFullyMerged) {
if (await MagitUtils.confirmAction(`Delete unmerged branch ${branch.name}?`)) {
return gitRun(repository.gitRepository, ['push', '--delete', remote, name]);

View File

@ -23,7 +23,7 @@ export async function rebasing(repository: MagitRepository) {
const switches = [
{ key: '-k', name: '--keep-empty', description: 'Keep empty commits' },
{ key: '-p', name: '--preserve-merges', description: 'Preserve merges' },
{ key: '-p', name: '--rebase-merges', description: 'Rebase merges' },
{ key: '-c', name: '--committer-date-is-author-date', description: 'Lie about committer date' },
{ key: '-a', name: '--autosquash', description: 'Autosquash' },
{ key: '-A', name: '--autostash', description: 'Autostash' },

View File

@ -5,7 +5,7 @@ import FilePathUtils from '../utils/filePathUtils';
import GitTextUtils from '../utils/gitTextUtils';
import MagitUtils from '../utils/magitUtils';
import MagitStatusView from '../views/magitStatusView';
import { Status, Commit, RefType, Repository, Change } from '../typings/git';
import { Status, Commit, RefType, Repository, Change, Ref } from '../typings/git';
import { MagitBranch, MagitUpstreamRef } from '../models/magitBranch';
import { gitRun, LogLevel } from '../utils/gitRawRunner';
import * as Constants from '../common/constants';
@ -132,16 +132,18 @@ export async function internalMagitStatus(repository: Repository): Promise<Magit
const HEAD = repository.state.HEAD as MagitBranch | undefined;
const refs = await getRefs(repository);
if (HEAD?.commit) {
HEAD.commitDetails = await getCommit(repository, HEAD.commit);
HEAD.tag = repository.state.refs.find(r => HEAD?.commit === r.commit && r.type === RefType.Tag);
HEAD.tag = refs.find(r => HEAD?.commit === r.commit && r.type === RefType.Tag);
try {
if (HEAD.upstream?.remote) {
const upstreamRemote = HEAD.upstream.remote;
const upstreamRemoteCommit = repository.state.refs.find(ref => ref.remote === upstreamRemote && ref.name === `${upstreamRemote}/${HEAD.upstream?.name}`)?.commit;
const upstreamRemoteCommit = refs.find(ref => ref.remote === upstreamRemote && ref.name === `${upstreamRemote}/${HEAD.upstream?.name}`)?.commit;
const upstreamRemoteCommitDetails = upstreamRemoteCommit ? getCommit(repository, upstreamRemoteCommit) : undefined;
const isRebaseUpstream = repository.getConfig(`branch.${HEAD.upstream.name}.rebase`);
@ -157,7 +159,7 @@ export async function internalMagitStatus(repository: Repository): Promise<Magit
HEAD.pushRemote = await pushRemoteStatus(repository);
}
const remoteBranches = repository.state.refs.filter(ref => ref.type === RefType.RemoteHead);
const remoteBranches = refs.filter(ref => ref.type === RefType.RemoteHead);
const remotes: MagitRemote[] = repository.state.remotes.map(remote => ({
...remote,
@ -181,10 +183,10 @@ export async function internalMagitStatus(repository: Repository): Promise<Magit
mergingState: await mergingStateTask,
cherryPickingState: await cherryPickingStateTask,
revertingState: await revertingStateTask,
branches: repository.state.refs.filter(ref => ref.type === RefType.Head),
branches: refs.filter(ref => ref.type === RefType.Head),
remotes,
tags: repository.state.refs.filter(ref => ref.type === RefType.Tag),
refs: repository.state.refs,
tags: refs.filter(ref => ref.type === RefType.Tag),
refs,
submodules: repository.state.submodules,
gitRepository: repository,
forgeState: forgeState,
@ -212,7 +214,8 @@ async function pushRemoteStatus(repository: Repository): Promise<MagitUpstreamRe
const commitsAhead = await Promise.all(commitsAheadPushRemote.map(c => getCommit(repository, c)));
const commitsBehind = await Promise.all(commitsBehindPushRemote.map(c => getCommit(repository, c)));
const pushRemoteCommit = repository.state.refs.find(ref => ref.remote === pushRemote && ref.name === `${pushRemote}/${HEAD.name}`)?.commit;
const refs = await getRefs(repository);
const pushRemoteCommit = refs.find(ref => ref.remote === pushRemote && ref.name === `${pushRemote}/${HEAD.name}`)?.commit;
const pushRemoteCommitDetails = pushRemoteCommit ? getCommit(repository, pushRemoteCommit) : Promise.resolve(undefined);
return { remote: pushRemote, name: HEAD.name, commit: await pushRemoteCommitDetails, commitsAhead, commitsBehind };
@ -306,7 +309,8 @@ async function rebasingStatus(repository: Repository, dotGitPath: string, logTas
}
let ontoCommit = await getCommit(repository, await rebaseOntoPathFileTask!);
let ontoBranch = repository.state.refs.find(ref => ref.commit === ontoCommit.hash && ref.type !== RefType.RemoteHead);
const refs = await getRefs(repository);
let ontoBranch = refs.find(ref => ref.commit === ontoCommit.hash && ref.type !== RefType.RemoteHead);
let onto = {
name: ontoBranch?.name ?? GitTextUtils.shortHash(ontoCommit.hash),
@ -403,4 +407,14 @@ async function getStashes(repository: Repository): Promise<Stash[]> {
} catch {
return [];
}
}
async function getRefs(repository: Repository): Promise<Ref[]> {
// `repository.getRefs` is not available on older versions and we should
// just use `repository.state.refs` on those versions.
if (typeof repository.getRefs !== 'function') {
return repository.state.refs;
}
return await repository.getRefs({});
}

15
src/typings/git.d.ts vendored
View File

@ -103,6 +103,7 @@ export interface Change {
export interface RepositoryState {
readonly HEAD: Branch | undefined;
// @deprecated Use `Repository.getRefs()` instead.
readonly refs: Ref[];
readonly remotes: Remote[];
readonly submodules: Submodule[];
@ -147,11 +148,15 @@ export interface FetchOptions {
depth?: number;
}
export interface BranchQuery {
readonly remote?: boolean;
readonly pattern?: string;
readonly count?: number;
export interface RefQuery {
readonly contains?: string;
readonly count?: number;
readonly pattern?: string;
readonly sort?: 'alphabetically' | 'committerdate';
}
export interface BranchQuery extends RefQuery {
readonly remote?: boolean;
}
export interface Repository {
@ -197,6 +202,8 @@ export interface Repository {
getBranches(query: BranchQuery): Promise<Ref[]>;
setBranchUpstream(name: string, upstream: string): Promise<void>;
getRefs(query: RefQuery, /* cancellationToken?: CancellationToken */): Promise<Ref[]>;
getMergeBase(ref1: string, ref2: string): Promise<string>;
tag(name: string, upstream: string): Promise<void>;

View File

@ -4,6 +4,7 @@ const commitCache: { [hash: string]: Promise<Commit>; } = {};
export function getCommit(repository: Repository, hash: string): Promise<Commit> {
//@ts-expect-error TS2801
if (commitCache[hash]) {
return commitCache[hash];
}