di-sukharev / di-sukharev/opencommit

Feature: Work with husky

Open
#47 1 comment 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
JavaScript
Stars
7.5k
Forks
445
Avg merge
18m
Merged PRs (30d)
2

Description

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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Locate the hook-related helpers named in the issue: isHookCalled, isHookExists, and the hook setup logic, then inspect how git hook paths are currently handled. Verify behavior with and without core.hooksPath, including a .husky path; done means the listed command-line and hook scenarios work in both cases.

Written by the indexing model from the issue text.

Assessment

Tech stack
git, javascript
Domain
cli, tooling
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.