@netlify/git-utils

    2.0.2 • Public • Published

    Coverage Status Build

    Git Utility

    Utility for dealing with modified, created, deleted files since a git commit.

    Usage

    /* Export the Netlify Plugin */
    module.exports = {
      onPreBuild: ({ utils }) => {
        const { git } = utils
    
        /* Do stuff if files modified */
        if (git.modifiedFiles.length !== 0) {
          console.log('Modified files:', git.modifiedFiles)
        }
    
        /* Do stuff only if html code edited */
        const htmlFiles = git.fileMatch('**/*.html')
        console.log('html files git info:', htmlFiles)
    
        if (htmlFiles.edited.length !== 0) {
          console.log('>> Run thing because HTML has changed\n')
        }
        //
        /* Do stuff only if markdown files edited */
        const markdownFiles = git.fileMatch('**/*.md')
        console.log('markdown files git info:', markdownFiles)
    
        if (markdownFiles.modified.length !== 0) {
          console.log('>> Run thing because Markdown files have been created/changed/deleted\n')
        }
    
        /* Do stuff only if css files edited */
        const cssFiles = git.fileMatch('**/*.css')
        if (cssFiles.deleted.length !== 0) {
          console.log('>> Run thing because css files have been deleted\n')
          console.log(cssFiles)
        }
      },
    }

    API

    The git util includes the following signature.

    module.exports = {
      onPreBuild: ({ utils }) => {
        console.log(utils.git)
        // {
        // fileMatch: [Function], <-- Lookup function. See below
        // modifiedFiles: [ Array of all modified files ],
        // createdFiles: [ Array of all created files ],
        // deletedFiles: [ Array of all deleted files ],
        // commits: [ Array of commits with details ],
        // linesOfCode: [AsyncFunction: linesOfCode] <-- how many lines of code have changed
        // }
        //
      },
    }

    git.fileMatch() is a glob matcher function to detect the git status of a pattern of files.

    Example:

    const cssFiles = git.fileMatch('**/*.css')
    console.log('cssFiles', cssFiles)
    // {
    // modified: [ 'just-changed.css', 'just-changed-two.css' ],
    // created: [ 'just-added.css' ],
    // deleted: [ 'just-deleted.css' ],
    // edited: [ 'just-changed.css', 'just-changed-two.css', 'just-added.css', 'just-deleted.css' ]
    // }
    //

    Prior art

    This was originally found in danger.js and extracted into this utility

    Install

    npm i @netlify/git-utils@2.0.2

    Version

    2.0.2

    License

    MIT

    Unpacked Size

    12.3 kB

    Total Files

    10

    Last publish

    Collaborators

    • dengeist
    • jgee0110
    • biilmann
    • shortdiv
    • marcus.netlify
    • ehmicky
    • erezro
    • lesliecdubs
    • neolegends
    • jgantunes
    • eduardoboucas
    • charliegerard
    • netlify-bot
    • nasiba
    • zachleat
    • ascorbic