Skip to content

Feature: Work with husky  #47

Open
@matt-degraffenreid

Description

@matt-degraffenreid

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions