RFR: 1690: Make jcheck cli able to use conf from workspace or other commit [v3]
    Erik Joelsson 
    erikj at openjdk.org
       
    Wed Nov 30 23:46:36 UTC 2022
    
    
  
On Wed, 30 Nov 2022 19:34:24 GMT, Zhao Song <zsong at openjdk.org> wrote:
>> Currently, the command `git skara jcheck` can only use the `.jcheck/conf` configuration file in the current checking commit.
>> However, sometimes users want to run jcheck with different configurations to validate their commits. Therefore, we need to upgrade `git skara jcheck`.
>> 
>> In this patch, `git skara jcheck` would be able to support following usecases.
>> 
>> 1. Run jcheck on a commit or a series of commits using the .jcheck/conf in the same commit. (what we do by default today)
>> `git skara jcheck`
>> 
>> 2. Run jcheck on a commit or a series of commits using the .jcheck/conf in a different specified commit. 
>> `git skara jcheck --specified-conf-commit <COMMIT HASH>`
>> 
>> 3. Run jcheck on a commit or a series of commits using the .jcheck/conf in my workspace. 
>> `git skara jcheck --workspace-conf`
>> 
>> 4. Run jcheck on a commit or a series of commits using a config file that I point to directly, that may have any name. 
>> `git skara jcheck --workspace-conf --conf-file <FILENAME>`
>> 
>> 5. Run jcheck on the diff in my current workspace, either --staged or not using the .jcheck/conf in my workspace.
>> `git skara jcheck --workspace-diff`
>
> Zhao Song has updated the pull request incrementally with one additional commit since the last revision:
> 
>   implemented case 5
There are a lot of minor things, but all in all this turned out better than I had imagined. Looking forward to using it. 
Have you tried all the options against a repository with various degrees of local changes in it?
cli/src/main/java/org/openjdk/skara/cli/GitJCheck.java line 103:
> 101:                   .fullname("conf-rev")
> 102:                   .describe("REV")
> 103:                   .helptext("Use .jcheck/conf in specified rev")
Suggestion:
                  .helptext("Use .jcheck/conf in the specified revision")
cli/src/main/java/org/openjdk/skara/cli/GitJCheck.java line 148:
> 146:             Switch.shortcut("")
> 147:                   .fullname("staged")
> 148:                   .helptext("Run jcheck includes staged changes and by default jcheck will use staged .jcheck/conf")
Suggestion:
                  .helptext("Check staged changes as if they were committed")
cli/src/main/java/org/openjdk/skara/cli/GitJCheck.java line 153:
> 151:                   .fullname("working-tree")
> 152:                   .helptext("Run jcheck includes changes in working tree and by default " +
> 153:                           "jcheck will use .jcheck/conf in working tree")
Suggestion:
                  .helptext("Check changes in working tree as if they were committed")
cli/src/main/java/org/openjdk/skara/cli/GitJCheck.java line 243:
> 241: 
> 242:         var staged = arguments.contains("staged");
> 243:         var working_tree = arguments.contains("working-tree");
Please use camelCase for local variables.
Suggestion:
        var workingTree = arguments.contains("working-tree");
cli/src/main/java/org/openjdk/skara/cli/GitJCheck.java line 246:
> 244:         // This two flags are mutually exclusive
> 245:         if (staged && working_tree) {
> 246:             System.err.println(String.format("error: you can only choose one from staged or working-tree"));
Suggestion:
        // These two flags are mutually exclusive
        if (staged && working_tree) {
            System.err.println(String.format("error: can only use one of --staged or --working-tree"));
cli/src/main/java/org/openjdk/skara/cli/GitJCheck.java line 268:
> 266:             confFlagCount++;
> 267:         }
> 268:         // This four flags are mutually exclusive
Suggestion:
        // These four flags are mutually exclusive
cli/src/main/java/org/openjdk/skara/cli/GitJCheck.java line 271:
> 269:         if (confFlagCount > 1) {
> 270:             System.err.println(String.format("error: you can only choose one from using jcheck " +
> 271:                     "configuration in work space or in a specified commit"));
Suggestion:
            System.err.println(String.format("error: can only use one source for jcheck configuration"));
vcs/src/main/java/org/openjdk/skara/vcs/git/GitRepository.java line 1664:
> 1662: 
> 1663:     @Override
> 1664:     public Optional<Hash> wholeHash(String rev) {
Isn't this just `::resolve(String)`?
vcs/src/main/java/org/openjdk/skara/vcs/git/GitRepository.java line 1675:
> 1673: 
> 1674:     @Override
> 1675:     public Optional<List<String>> stagedFile(Path path) {
Suggestion:
    public Optional<List<String>> stagedFileContents(Path path) {
vcs/src/main/java/org/openjdk/skara/vcs/git/GitRepository.java line 1684:
> 1682:         return Optional.empty();
> 1683:     }
> 1684: 
Suggestion:
    /**
     * Creates a fake Commit instance representing the currently staged diff.
     */
vcs/src/main/java/org/openjdk/skara/vcs/git/GitRepository.java line 1687:
> 1685:     @Override
> 1686:     public Commit staged() throws IOException {
> 1687:         var author = new Author("jcheck", "jcheck at none.none");
For the default user and email, there is already a `::userName` method. You can create one for email as well, and then use these values as fallbacks (`Optional.orElse`).
vcs/src/main/java/org/openjdk/skara/vcs/git/GitRepository.java line 1692:
> 1690:         return new Commit(commitMetaData, List.of(diffStaged()));
> 1691:     }
> 1692: 
Suggestion:
    /**
     * Creates a fake Commit instance representing the current working tree.
     */
-------------
PR: https://git.openjdk.org/skara/pull/1428
    
    
More information about the skara-dev
mailing list