Regarding failure handling. This command should stop after the first failing cherry-pick. HEAD will then point to the result of the last successful cherry-pick. But you are right, how do I then report the overall success of this command. 

My proposal: I'll return a RevCommit which points to new HEAD only if all cherry-picks where succesfull. Otherwise null is returned. Additionally I add a getSuccesfullyCherryPickedRefs() to publish a list of all successful cherry-picks.