1

I have a folder full of files and I want to get the timestamps of last git update for each of those files.

I'd like to get those in a Gradle task.

I tried the following with GrGit:

def git = org.ajoberstar.grgit.Grgit.open dir:project.rootDir task showGit() { doFirst { file( "$project.rootDir/src/main/java/some/folder" ).listFiles().each{ f -> git.log( includes:[ 'HEAD' ], paths:[ f.name ] ).each{ println "$f.name -> Author: $it.author.name - Date: ${it.date.format( 'dd.MM.yyyy HH:mm' )}" } } } } 

but it prints nothing.

If I ommit the paths like so:

task showGit() { doFirst { git.log( includes:[ 'HEAD' ] ).each{ println "Author: $it.author.name - Date: ${it.date.format( 'dd.MM.yyyy HH:mm' )}" } } } 

it prints all commit infos for the whole dir.

How to get the timestamps for each file?

1 Answer 1

1

It turns out it was fairly easy.

Inspired by How to get the last commit date for a bunch of files in Git? I put together my own GrGit task:

def git = org.ajoberstar.grgit.Grgit.open dir:project.rootDir task lastGitUpdated() { doFirst { int base = project.rootDir.toURI().toString().size() def dates = file( "$project.rootDir/src/main/java/some/dir" ).listFiles().collect{ git.log( includes:[ 'HEAD' ], paths:[ it.toURI().toString().substring( base ) ], maxCommits:1 )[ 0 ].date } } } 

and it works like a charm!

The only thing which is slightly dissappointing is, that the tasks on a dir with ~150 files takes ~2 mins to complete...

Sign up to request clarification or add additional context in comments.

2 Comments

You've written a script for Commit Date. OP asked for File Modification Date.
I'm the OP here

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.