Skip to content

Instantly share code, notes, and snippets.

@jonathansick
Last active January 20, 2024 07:58
Show Gist options
  • Save jonathansick/8bbe88a85addaeeea4e7fe9ef15b016b to your computer and use it in GitHub Desktop.
Save jonathansick/8bbe88a85addaeeea4e7fe9ef15b016b to your computer and use it in GitHub Desktop.
GitHub GraphQL repo commit history query
{
repository(name: "sickvim", owner: "jonathansick") {
ref(qualifiedName: "master") {
target {
... on Commit {
id
history(first: 5) {
pageInfo {
hasNextPage
}
edges {
node {
messageHeadline
oid
message
author {
name
email
date
}
}
}
}
}
}
}
}
}
@kasunsiyambalapitiya
Copy link

can we use graphQL to get details about a given commit hash, (just like in commit REST API)

@kasunsiyambalapitiya
Copy link

Can we use the above code to get the details of first 2 commits before a certain commit ( hash 7e6c355e1c250036c9ba0d76133b5068b2444f3d ) that exists in the repository. Here is my code.

query { 
repository(owner:"wso2",name:"product-is"){
  object(expression:"master"){
    ... on Commit {
      history(first:2,before:"7e6c355e1c250036c9ba0d76133b5068b2444f3d"){
        edges{
          node{
            id
            blame(path:"pom.xml"){
              ranges{
                startingLine
                endingLine
                commit{
                  author {
                  
                    email
                    name
                  }
                }
              }
            }
            
          }
        }
        
        
      }
    }
  }
}
    
  

}
 

but it gives me this error

"errors": [
    {
      "message": "backwards pagination unsupported for CommitHistoryConnection",
      "type": "INVALID_CURSOR_ARGUMENTS",
      "locations": [
        {
          "line": 11,
          "column": 9
        }
      ],
      "path": [
        "repository",
        "object",
        "history",
        "edges"
      ]
    }
  ]

What I am doing wrong

@echjordan
Copy link

@jonathansick This query works great for me, I'm just not sure why. Based on SQL type experience, what I want to do is a "join" between Repo and Commit fields and I don't understand how that maps onto graphQL's fragments or why the ref -> target is necessary. Any clarification would be mightily appreciated.

@joebowbeer
Copy link

@kasunsiyambalapitiya before needs to be a cursor. Generally, I think, first is used with after and last is used with before.

@fregante
Copy link

This was the first Google result my search, can you update the code to use defaultBranchRef instead of ref(…)?

@Jackenmen
Copy link

This was the first Google result my search, can you update the code to use defaultBranchRef instead of ref(…)?

If you do, please at least comment with the original version (or maybe make another file in the gist?) because this query is also useful to figure out how to get history from a certain point (be that tag or commit oid).

@alexander-schranz
Copy link

I let this here maybe it helps somebody else to get commits for defaultBranchRef:

  {
    repository(owner: "sulu", name: "sulu") {
      defaultBranchRef {
        name
        target {
          ... on Commit {
            history {
              totalCount
            }
          }
        }
      }
      stargazers {
        totalCount
      }
      releases {
        totalCount
      }
    }
  }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment