From 1a391955591fed34e0a5033aa644f47842bbd7f1 Mon Sep 17 00:00:00 2001
From: Sergei Zharinov <zharinov@users.noreply.github.com>
Date: Fri, 26 Nov 2021 23:36:17 +0300
Subject: [PATCH] refactor(git): Extract types to separate file (#12855)

---
 lib/config/types.ts                           |  2 +-
 lib/manager/bundler/artifacts.spec.ts         |  2 +-
 lib/manager/cocoapods/artifacts.spec.ts       |  2 +-
 lib/manager/composer/artifacts.spec.ts        |  2 +-
 lib/manager/gomod/artifacts.spec.ts           |  2 +-
 .../gradle-wrapper/artifacts-real.spec.ts     |  2 +-
 lib/manager/gradle-wrapper/artifacts.spec.ts  |  2 +-
 lib/manager/gradle-wrapper/artifacts.ts       |  3 +-
 lib/manager/jsonnet-bundler/artifacts.spec.ts |  2 +-
 lib/manager/pip-compile/artifacts.spec.ts     |  2 +-
 lib/manager/pipenv/artifacts.spec.ts          |  2 +-
 lib/manager/types.ts                          |  2 +-
 lib/util/git/author.ts                        |  6 +-
 lib/util/git/config.ts                        | 11 +--
 lib/util/git/index.spec.ts                    |  6 +-
 lib/util/git/index.ts                         | 80 ++++---------------
 lib/util/git/types.ts                         | 58 ++++++++++++++
 .../branch/execute-post-upgrade-commands.ts   |  3 +-
 lib/workers/branch/get-updated.ts             |  3 +-
 lib/workers/branch/index.spec.ts              |  2 +-
 lib/workers/types.ts                          |  2 +-
 21 files changed, 97 insertions(+), 99 deletions(-)
 create mode 100644 lib/util/git/types.ts

diff --git a/lib/config/types.ts b/lib/config/types.ts
index 27634a140a..c349a7066c 100644
--- a/lib/config/types.ts
+++ b/lib/config/types.ts
@@ -1,7 +1,7 @@
 import type { LogLevel } from 'bunyan';
 import type { Range } from 'semver';
 import type { HostRule } from '../types';
-import type { GitNoVerifyOption } from '../util/git';
+import type { GitNoVerifyOption } from '../util/git/types';
 
 export type RenovateConfigStage =
   | 'global'
diff --git a/lib/manager/bundler/artifacts.spec.ts b/lib/manager/bundler/artifacts.spec.ts
index deca0c00d3..d0ce943b32 100644
--- a/lib/manager/bundler/artifacts.spec.ts
+++ b/lib/manager/bundler/artifacts.spec.ts
@@ -7,7 +7,7 @@ import type { RepoGlobalConfig } from '../../config/types';
 import * as _datasource from '../../datasource';
 import * as docker from '../../util/exec/docker';
 import * as _env from '../../util/exec/env';
-import type { StatusResult } from '../../util/git';
+import type { StatusResult } from '../../util/git/types';
 import type { UpdateArtifactsConfig } from '../types';
 import * as _bundlerHostRules from './host-rules';
 import { updateArtifacts } from '.';
diff --git a/lib/manager/cocoapods/artifacts.spec.ts b/lib/manager/cocoapods/artifacts.spec.ts
index f36e1c8fda..77ca05394a 100644
--- a/lib/manager/cocoapods/artifacts.spec.ts
+++ b/lib/manager/cocoapods/artifacts.spec.ts
@@ -7,7 +7,7 @@ import { GlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import * as _datasource from '../../datasource';
 import * as _env from '../../util/exec/env';
-import type { StatusResult } from '../../util/git';
+import type { StatusResult } from '../../util/git/types';
 import type { UpdateArtifactsConfig } from '../types';
 import { updateArtifacts } from '.';
 
diff --git a/lib/manager/composer/artifacts.spec.ts b/lib/manager/composer/artifacts.spec.ts
index 3373630d4b..7ebeaa8f2a 100644
--- a/lib/manager/composer/artifacts.spec.ts
+++ b/lib/manager/composer/artifacts.spec.ts
@@ -7,7 +7,7 @@ import { PlatformId } from '../../constants';
 import * as _datasource from '../../datasource';
 import * as datasourcePackagist from '../../datasource/packagist';
 import * as docker from '../../util/exec/docker';
-import type { StatusResult } from '../../util/git';
+import type { StatusResult } from '../../util/git/types';
 import * as hostRules from '../../util/host-rules';
 import type { UpdateArtifactsConfig } from '../types';
 import * as composer from './artifacts';
diff --git a/lib/manager/gomod/artifacts.spec.ts b/lib/manager/gomod/artifacts.spec.ts
index 81520b3ac7..c4a2d881f5 100644
--- a/lib/manager/gomod/artifacts.spec.ts
+++ b/lib/manager/gomod/artifacts.spec.ts
@@ -7,7 +7,7 @@ import { GlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import * as docker from '../../util/exec/docker';
 import * as _env from '../../util/exec/env';
-import type { StatusResult } from '../../util/git';
+import type { StatusResult } from '../../util/git/types';
 import * as _hostRules from '../../util/host-rules';
 import type { UpdateArtifactsConfig } from '../types';
 import * as gomod from './artifacts';
diff --git a/lib/manager/gradle-wrapper/artifacts-real.spec.ts b/lib/manager/gradle-wrapper/artifacts-real.spec.ts
index 4ae117f3d7..e5ff7af128 100644
--- a/lib/manager/gradle-wrapper/artifacts-real.spec.ts
+++ b/lib/manager/gradle-wrapper/artifacts-real.spec.ts
@@ -5,7 +5,7 @@ import * as httpMock from '../../../test/http-mock';
 import { git, partial } from '../../../test/util';
 import { GlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
-import type { StatusResult } from '../../util/git';
+import type { StatusResult } from '../../util/git/types';
 import { ifSystemSupportsGradle } from '../gradle/deep/__testutil__/gradle';
 import type { UpdateArtifactsConfig } from '../types';
 import * as gradleWrapper from '.';
diff --git a/lib/manager/gradle-wrapper/artifacts.spec.ts b/lib/manager/gradle-wrapper/artifacts.spec.ts
index b7770644d8..4d042f021f 100644
--- a/lib/manager/gradle-wrapper/artifacts.spec.ts
+++ b/lib/manager/gradle-wrapper/artifacts.spec.ts
@@ -12,7 +12,7 @@ import {
 import { GlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import { resetPrefetchedImages } from '../../util/exec/docker';
-import type { StatusResult } from '../../util/git';
+import type { StatusResult } from '../../util/git/types';
 import type { UpdateArtifactsConfig } from '../types';
 import * as gradleWrapper from '.';
 
diff --git a/lib/manager/gradle-wrapper/artifacts.ts b/lib/manager/gradle-wrapper/artifacts.ts
index 98dabbe218..3a70a7bf5e 100644
--- a/lib/manager/gradle-wrapper/artifacts.ts
+++ b/lib/manager/gradle-wrapper/artifacts.ts
@@ -5,7 +5,8 @@ import { TEMPORARY_ERROR } from '../../constants/error-messages';
 import { logger } from '../../logger';
 import { ExecOptions, exec } from '../../util/exec';
 import { readLocalFile, stat, writeLocalFile } from '../../util/fs';
-import { StatusResult, getRepoStatus } from '../../util/git';
+import { getRepoStatus } from '../../util/git';
+import type { StatusResult } from '../../util/git/types';
 import { Http } from '../../util/http';
 import type { UpdateArtifact, UpdateArtifactsResult } from '../types';
 import {
diff --git a/lib/manager/jsonnet-bundler/artifacts.spec.ts b/lib/manager/jsonnet-bundler/artifacts.spec.ts
index 9b358b6fbb..87c6664934 100644
--- a/lib/manager/jsonnet-bundler/artifacts.spec.ts
+++ b/lib/manager/jsonnet-bundler/artifacts.spec.ts
@@ -3,7 +3,7 @@ import { envMock, exec, mockExecAll } from '../../../test/exec-util';
 import { env, fs, git } from '../../../test/util';
 import { GlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
-import type { StatusResult } from '../../util/git';
+import type { StatusResult } from '../../util/git/types';
 import type { UpdateArtifactsConfig } from '../types';
 import { updateArtifacts } from '.';
 
diff --git a/lib/manager/pip-compile/artifacts.spec.ts b/lib/manager/pip-compile/artifacts.spec.ts
index fff86aa9d0..6b37eb0e07 100644
--- a/lib/manager/pip-compile/artifacts.spec.ts
+++ b/lib/manager/pip-compile/artifacts.spec.ts
@@ -7,7 +7,7 @@ import { GlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import * as docker from '../../util/exec/docker';
 import * as _env from '../../util/exec/env';
-import type { StatusResult } from '../../util/git';
+import type { StatusResult } from '../../util/git/types';
 import type { UpdateArtifactsConfig } from '../types';
 import * as pipCompile from './artifacts';
 
diff --git a/lib/manager/pipenv/artifacts.spec.ts b/lib/manager/pipenv/artifacts.spec.ts
index c8351a8759..2993afd547 100644
--- a/lib/manager/pipenv/artifacts.spec.ts
+++ b/lib/manager/pipenv/artifacts.spec.ts
@@ -7,7 +7,7 @@ import { GlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import * as docker from '../../util/exec/docker';
 import * as _env from '../../util/exec/env';
-import type { StatusResult } from '../../util/git';
+import type { StatusResult } from '../../util/git/types';
 import type { UpdateArtifactsConfig } from '../types';
 import * as pipenv from './artifacts';
 
diff --git a/lib/manager/types.ts b/lib/manager/types.ts
index 326c07093b..77f848f356 100644
--- a/lib/manager/types.ts
+++ b/lib/manager/types.ts
@@ -6,7 +6,7 @@ import type {
 } from '../config/types';
 import type { ProgrammingLanguage } from '../constants';
 import type { RangeStrategy, SkipReason } from '../types';
-import type { File } from '../util/git';
+import type { File } from '../util/git/types';
 
 export type Result<T> = T | Promise<T>;
 
diff --git a/lib/util/git/author.ts b/lib/util/git/author.ts
index f029ebc336..26860683b6 100644
--- a/lib/util/git/author.ts
+++ b/lib/util/git/author.ts
@@ -1,11 +1,7 @@
 import addrs from 'email-addresses';
 import { logger } from '../../logger';
 import { regEx } from '../regex';
-
-export interface GitAuthor {
-  name?: string;
-  address?: string;
-}
+import type { GitAuthor } from './types';
 
 export function parseGitAuthor(input: string): GitAuthor | null {
   let result: GitAuthor = null;
diff --git a/lib/util/git/config.ts b/lib/util/git/config.ts
index 7842559b57..056189cfca 100644
--- a/lib/util/git/config.ts
+++ b/lib/util/git/config.ts
@@ -1,15 +1,8 @@
 import is from '@sindresorhus/is';
 import { SimpleGitOptions } from 'simple-git';
+import type { GitNoVerifyOption } from './types';
 
-export const enum GitNoVerifyOption {
-  Commit = 'commit',
-  Push = 'push',
-}
-
-let noVerify: GitNoVerifyOption[] = [
-  GitNoVerifyOption.Push,
-  GitNoVerifyOption.Commit,
-];
+let noVerify: GitNoVerifyOption[] = ['push', 'commit'];
 
 export function setNoVerify(value: GitNoVerifyOption[]): void {
   if (!is.array(value, is.string)) {
diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts
index 99e2ec2214..23dfe76acf 100644
--- a/lib/util/git/index.spec.ts
+++ b/lib/util/git/index.spec.ts
@@ -5,7 +5,7 @@ import tmp from 'tmp-promise';
 import { GlobalConfig } from '../../config/global';
 import { CONFIG_VALIDATION } from '../../constants/error-messages';
 import * as git from '.';
-import { GitNoVerifyOption, setNoVerify } from '.';
+import { setNoVerify } from '.';
 
 describe('util/git/index', () => {
   jest.setTimeout(15000);
@@ -363,7 +363,7 @@ describe('util/git/index', () => {
           contents: 'some new-contents',
         },
       ];
-      setNoVerify([GitNoVerifyOption.Commit]);
+      setNoVerify(['commit']);
 
       await git.commitFiles({
         branchName: 'renovate/something',
@@ -393,7 +393,7 @@ describe('util/git/index', () => {
           contents: 'some new-contents',
         },
       ];
-      setNoVerify([GitNoVerifyOption.Push]);
+      setNoVerify(['push']);
 
       await git.commitFiles({
         branchName: 'renovate/something',
diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts
index fcd7990b5f..58f5450373 100644
--- a/lib/util/git/index.ts
+++ b/lib/util/git/index.ts
@@ -1,13 +1,6 @@
 import URL from 'url';
 import fs from 'fs-extra';
-import Git, {
-  DiffResult as DiffResult_,
-  Options,
-  ResetMode,
-  SimpleGit,
-  StatusResult as StatusResult_,
-  TaskOptions,
-} from 'simple-git';
+import Git, { Options, ResetMode, SimpleGit, TaskOptions } from 'simple-git';
 import { join } from 'upath';
 import { configFileNames } from '../../config/app-strings';
 import { GlobalConfig } from '../../config/global';
@@ -22,45 +15,27 @@ import {
 } from '../../constants/error-messages';
 import { logger } from '../../logger';
 import { ExternalHostError } from '../../types/errors/external-host-error';
-import { GitOptions, GitProtocol } from '../../types/git';
+import type { GitProtocol } from '../../types/git';
 import { Limit, incLimitedValue } from '../../workers/global/limits';
 import { regEx } from '../regex';
 import { parseGitAuthor } from './author';
-import { GitNoVerifyOption, getNoVerify, simpleGitConfig } from './config';
+import { getNoVerify, simpleGitConfig } from './config';
 import { configSigningKey, writePrivateKey } from './private-key';
-
-export { GitNoVerifyOption, setNoVerify } from './config';
+import type {
+  CommitFilesConfig,
+  CommitSha,
+  LocalConfig,
+  StatusResult,
+  StorageConfig,
+} from './types';
+
+export { setNoVerify } from './config';
 export { setPrivateKey } from './private-key';
 
 declare module 'fs-extra' {
   export function exists(pathLike: string): Promise<boolean>;
 }
 
-export type StatusResult = StatusResult_;
-
-export type DiffResult = DiffResult_;
-
-export type CommitSha = string;
-
-interface StorageConfig {
-  currentBranch?: string;
-  url: string;
-  extraCloneOpts?: GitOptions;
-  cloneSubmodules?: boolean;
-  fullClone?: boolean;
-}
-
-interface LocalConfig extends StorageConfig {
-  additionalBranches: string[];
-  currentBranch: string;
-  currentBranchSha: string;
-  branchCommits: Record<string, CommitSha>;
-  branchIsModified: Record<string, boolean>;
-  ignoredAuthors: string[];
-  gitAuthorName?: string;
-  gitAuthorEmail?: string;
-}
-
 // istanbul ignore next
 function checkForPlatformFailure(err: Error): void {
   if (process.env.NODE_ENV === 'test') {
@@ -660,33 +635,6 @@ export async function hasDiff(branchName: string): Promise<boolean> {
   }
 }
 
-/**
- * File to commit
- */
-export interface File {
-  /**
-   * Relative file path
-   */
-  name: string;
-
-  /**
-   * file contents
-   */
-  contents: string | Buffer;
-
-  /**
-   * the executable bit
-   */
-  executable?: boolean;
-}
-
-export type CommitFilesConfig = {
-  branchName: string;
-  files: File[];
-  message: string;
-  force?: boolean;
-};
-
 export async function commitFiles({
   branchName,
   files,
@@ -764,7 +712,7 @@ export async function commitFiles({
     }
 
     const commitOptions: Options = {};
-    if (getNoVerify().includes(GitNoVerifyOption.Commit)) {
+    if (getNoVerify().includes('commit')) {
       commitOptions['--no-verify'] = null;
     }
 
@@ -795,7 +743,7 @@ export async function commitFiles({
       '--force-with-lease': null,
       '-u': null,
     };
-    if (getNoVerify().includes(GitNoVerifyOption.Push)) {
+    if (getNoVerify().includes('push')) {
       pushOptions['--no-verify'] = null;
     }
 
diff --git a/lib/util/git/types.ts b/lib/util/git/types.ts
new file mode 100644
index 0000000000..edf2902e21
--- /dev/null
+++ b/lib/util/git/types.ts
@@ -0,0 +1,58 @@
+import type { GitOptions } from '../../types/git';
+
+export type { DiffResult, StatusResult } from 'simple-git';
+
+export interface GitAuthor {
+  name?: string;
+  address?: string;
+}
+
+export type GitNoVerifyOption = 'commit' | 'push';
+
+export type CommitSha = string;
+
+export interface StorageConfig {
+  currentBranch?: string;
+  url: string;
+  extraCloneOpts?: GitOptions;
+  cloneSubmodules?: boolean;
+  fullClone?: boolean;
+}
+
+export interface LocalConfig extends StorageConfig {
+  additionalBranches: string[];
+  currentBranch: string;
+  currentBranchSha: string;
+  branchCommits: Record<string, CommitSha>;
+  branchIsModified: Record<string, boolean>;
+  ignoredAuthors: string[];
+  gitAuthorName?: string;
+  gitAuthorEmail?: string;
+}
+
+/**
+ * File to commit
+ */
+export interface File {
+  /**
+   * Relative file path
+   */
+  name: string;
+
+  /**
+   * file contents
+   */
+  contents: string | Buffer;
+
+  /**
+   * the executable bit
+   */
+  executable?: boolean;
+}
+
+export type CommitFilesConfig = {
+  branchName: string;
+  files: File[];
+  message: string;
+  force?: boolean;
+};
diff --git a/lib/workers/branch/execute-post-upgrade-commands.ts b/lib/workers/branch/execute-post-upgrade-commands.ts
index 7c863533f9..8a2fc6d054 100644
--- a/lib/workers/branch/execute-post-upgrade-commands.ts
+++ b/lib/workers/branch/execute-post-upgrade-commands.ts
@@ -5,7 +5,8 @@ import { addMeta, logger } from '../../logger';
 import type { ArtifactError } from '../../manager/types';
 import { exec } from '../../util/exec';
 import { readLocalFile, writeLocalFile } from '../../util/fs';
-import { File, getRepoStatus } from '../../util/git';
+import { getRepoStatus } from '../../util/git';
+import type { File } from '../../util/git/types';
 import { regEx } from '../../util/regex';
 import { sanitize } from '../../util/sanitize';
 import { compile } from '../../util/template';
diff --git a/lib/workers/branch/get-updated.ts b/lib/workers/branch/get-updated.ts
index 287c705488..2bd880163a 100644
--- a/lib/workers/branch/get-updated.ts
+++ b/lib/workers/branch/get-updated.ts
@@ -3,7 +3,8 @@ import { WORKER_FILE_UPDATE_FAILED } from '../../constants/error-messages';
 import { logger } from '../../logger';
 import { get } from '../../manager';
 import type { ArtifactError, PackageDependency } from '../../manager/types';
-import { File, getFile } from '../../util/git';
+import { getFile } from '../../util/git';
+import { File } from '../../util/git/types';
 import type { BranchConfig } from '../types';
 import { doAutoReplace } from './auto-replace';
 
diff --git a/lib/workers/branch/index.spec.ts b/lib/workers/branch/index.spec.ts
index d819e2e03b..196ac118a3 100644
--- a/lib/workers/branch/index.spec.ts
+++ b/lib/workers/branch/index.spec.ts
@@ -10,7 +10,7 @@ import * as _npmPostExtract from '../../manager/npm/post-update';
 import type { WriteExistingFilesResult } from '../../manager/npm/post-update/types';
 import { PrState } from '../../types';
 import * as _exec from '../../util/exec';
-import { File, StatusResult } from '../../util/git';
+import type { File, StatusResult } from '../../util/git/types';
 import * as _mergeConfidence from '../../util/merge-confidence';
 import * as _sanitize from '../../util/sanitize';
 import * as _limits from '../global/limits';
diff --git a/lib/workers/types.ts b/lib/workers/types.ts
index 401464f966..02e0c5a44f 100644
--- a/lib/workers/types.ts
+++ b/lib/workers/types.ts
@@ -14,7 +14,7 @@ import type {
   PackageFile,
 } from '../manager/types';
 import type { PlatformPrOptions } from '../platform/types';
-import type { File } from '../util/git';
+import type { File } from '../util/git/types';
 import type { MergeConfidence } from '../util/merge-confidence';
 import type { ChangeLogResult } from './pr/changelog/types';
 
-- 
GitLab