Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Work with husky #47

Open
matt-degraffenreid opened this issue Mar 23, 2023 · 1 comment
Open

Feature: Work with husky #47

matt-degraffenreid opened this issue Mar 23, 2023 · 1 comment

Comments

@matt-degraffenreid
Copy link
Contributor

Problem:

Opencommit only works with git hooks.

Solution:

Refactor the code to add some dynamic logic to the tool

Explanation:

  1. Identify hooks' path in the repo you are working in. This can be accomplished with the following command:

    git config core.hooksPath

    This needed to be translated into a util function for git so I wrote the following function:

    export const getCoreHooksPath = async(): Promise<string> => {
      const { stdout } = await execa('git', [
        'config',
        'core.hooksPath']);
    
      return stdout;
    }
    

    Note: the function throws an error when there is no set path that needs to be caught when used.

  2. Determine the path by invoking getCoreHooksPath catch the error and give the DEFAULT_SYMLINK_URL if core.hooksPath is not set.

    const getHooksPath = async (): Promise<string> => {
     try {
       const hooksPath = await getCoreHooksPath();
       return `${hooksPath}/${HOOK_NAME}`;
      } catch (error) {
        return DEFAULT_SYMLINK_URL;
      }
    };
    
  3. Refactor our two helper functions to utilize the getHooksPath function.

    export const isHookCalled = async (): Promise<boolean> => {
      const hooksPath = await getHooksPath();
      return process.argv[1].endsWith(hooksPath);
    };
    
    const isHookExists = async (): Promise<boolean> => {
      const hooksPath = await getHooksPath();
      return existsSync(hooksPath);
    };
    
  4. Replace the variable calls isHookCalled and isHookExists with the function call await isHookCalled() and await isHookExists() respectively.

Scenarios Tested

When core.hooksPath is not set

  • Can you run opencommit from the command line - Yes
  • Can you set opencommit as a hook - Yes
  • Can you run open commit as a hook - Yes
  • Can you unset opencommit as a hook - Yes

When core.hooksPath is set to .husky

  • Can you run opencommit from the command line - Yes
  • Can you set opencommit as a hook - Yes
  • Can you run open commit as a hook - Yes
  • Can you unset opencommit as a hook - Yes
di-sukharev pushed a commit that referenced this issue Apr 1, 2023
* refactor(cli.ts): call isHookCalled function asynchronously

feat(githook.ts): add support for git core hooks path and fallback to default symlink url if not found

feat(utils/git.ts): add getCoreHooksPath function to retrieve the path of the core hooks directory.

* refactor(githook.ts): remove console.log statement from hookCommand function

* feat(prepare-commit-msg-hook.ts): add isStageAllFlag parameter to prepareCommitMessageHook function to stage all changes if flag is true

* refactor(githook.ts): use path.join to join path segments instead of string concatenation
style(githook.ts): format code with prettier
zen0bit pushed a commit to oSoWoSo/opencommit that referenced this issue Apr 12, 2023
* refactor(cli.ts): call isHookCalled function asynchronously

feat(githook.ts): add support for git core hooks path and fallback to default symlink url if not found

feat(utils/git.ts): add getCoreHooksPath function to retrieve the path of the core hooks directory.

* refactor(githook.ts): remove console.log statement from hookCommand function

* feat(prepare-commit-msg-hook.ts): add isStageAllFlag parameter to prepareCommitMessageHook function to stage all changes if flag is true

* refactor(githook.ts): use path.join to join path segments instead of string concatenation
style(githook.ts): format code with prettier
zen0bit pushed a commit to oSoWoSo/opencommit that referenced this issue Apr 14, 2023
* refactor(cli.ts): call isHookCalled function asynchronously

feat(githook.ts): add support for git core hooks path and fallback to default symlink url if not found

feat(utils/git.ts): add getCoreHooksPath function to retrieve the path of the core hooks directory.

* refactor(githook.ts): remove console.log statement from hookCommand function

* feat(prepare-commit-msg-hook.ts): add isStageAllFlag parameter to prepareCommitMessageHook function to stage all changes if flag is true

* refactor(githook.ts): use path.join to join path segments instead of string concatenation
style(githook.ts): format code with prettier
@github-actions
Copy link

github-actions bot commented May 2, 2023

Stale issue message

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants