GithubHelp home page GithubHelp logo

git-to-json's Introduction

Git shell command to output git log as json

git log \
    --numstat \
    --format='id %h%nauthor %an%ndate %ai %nchanges' $@ | \
    ruby -lawne '
        markers = %w{ id author date }
        key = $F[0]
        if key == "changes"
          puts "\"changes\": ["
        else
          if markers.include? key
            $F.shift
            value = $F.inject { |o, n| o + " " + n }
            puts key == "id" ? "]\}\},\{\"#{$F[0]}\":\{" : "\"#{key}\": \"#{value}\","
          else
            add = $F[0]
            del = $F[1]
            path = $F[2]
            puts "{\"additions\": #{add}, \"deletions\": #{del}, \"path\": \"#{path}\"},"
          end
        end
    ' | \
    ruby -wpe '
        BEGIN{puts "["}; END{puts "]\}\}]"}
    ' | \
    tr -d '\n' | \
    sed "s/,]/]/g; s/]}},//"

JSON output:

[
    {
        "481bccf": {
            "author": "Nathan Dao",
            "date": "2015-05-29 13:53:59 +0300",
            "changes": [
                {
                    "additions": 2,
                    "deletions": 0,
                    "path": "path/to/Gemfile"
                }
            ]
        }
    },
    {
         "8441ars": {
            "author": "Author 2",
            "date": "2015-05-29 12:33:59 +0300",
            "changes": [
                {
                    "additions": 2,
                    "deletions": 0,
                    "path": "path/to/Gemfile"
                },
                {
                    "additions": 4,
                    "deletions": 0,
                    "path": "path/to/Gemfile.lock"
                },
                {
                    "additions": 8,
                    "deletions": 9,
                    "path": "path/to/app.rb"
                },
                {
                    "additions": 5,
                    "deletions": 2,
                    "path": "path/to/config.yml"
                }
            ]
        }

    }
]

git-to-json's People

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.