ghstack icon indicating copy to clipboard operation
ghstack copied to clipboard

Problem when tree doesn't change but commit structure has changed

Open ezyang opened this issue 2 years ago • 2 comments

Suppose you have commit A and B. You squash them into AB and run ghstack. This won't work; ghstack will say "well, B has the same tree as AB, so there's nothing to do." Even worse, when you're done, it will re check out B, undoing your AB merge.

ezyang avatar Nov 22 '22 13:11 ezyang

I think I've run into this issue.


I had a chain of commits, A-B-C-D.

I used git rebase -i B~ and squashed BC together: A-BC-D.

After rebasing, ghstack doesn't update the pull request for BC anymore. https://github.com/google-research/triangulate/pull/16

Is there any way I can fix this?


Full git log below:

commit 7005442dd4f0c2be28d7e24e5ca14e1c91ff943f
Author: Dan Zheng <[email protected]>
Date:   Mon Aug 7 11:44:41 2023 -0700

    Update quoter.py test case.
    
    Add flags to quoter.py for conditional flag-dependent exception raising.
    
    Consider replacing quoter.py altogether in the future.
    
    ghstack-source-id: 21b43d1e4151c50ebf86c3cc84ddf458bcf17c8c
    Pull Request resolved: https://github.com/google-research/triangulate/pull/17

commit 24409a0b44b8ac97c75a4430a8b39c4c231d9545
Author: Dan Zheng <[email protected]>
Date:   Mon Aug 7 11:44:40 2023 -0700

    Update core logic and main binary.
    
    Use newly added utilities to improve core logic:
    - `ast_utils`: Improved AST matching for extracting illegal state expressions.
    - `instrumentation_utils`: Robust probe call insertion, instead of relying on
      `eval` and string interpolation.
    - `logging`: Prettier and useful logging statements.
    
    ---
    
    Previously, `main` used explicit flags like `bug_trap` (bug line number) to
    describe the subject program failure location. This led to long CLI invocations,
    which are error-prone and difficult to use.
    
    Now, `main` is designed like `pdb`, wrapping a standard Python script invocation:
    
    ```
    triangulate [flags...] subject -- [subject_args...]
    ```
    
    `main` runs the subject program with arguments. If an exception is thrown, the
    exception location is used as the bug line number. This `pdb`-like invocation mode
    is easier to use and test.
    
    `main` now does prettier logging as well, for status messages.
    
    ghstack-source-id: 4f16c3e131f0d3ab319f48ab5d06e78cab4fd29b
    Pull Request resolved: https://github.com/google-research/triangulate/pull/16

commit c0627945427756e929f0428eabbee302263eec18
Author: Dan Zheng <[email protected]>
Date:   Mon Aug 7 11:22:56 2023 -0700

    Add AST matching mini-library.
    
    Add an `AST` wrapper class with a method `select_nodes(selector)` method for
    returning all descendent AST nodes that match some predicate.
    
    Add AST node predicates:
    - `NodePredicate`: base class.
    - `All`: intersection combinator of multiple `NodePredicate`s.
    - `HasType(type)`: matches nodes with a given type.
    - `HasLocationInfo`: matches nodes that have line number information.
    - `OverlapsWithLineNumber(type)`: matches nodes that overlap with a line number.
    - `IsProbeStatement(type)`: matches nodes that are probe statements.
      - Currently matches all `triangulate_probe` function calls, which are
        generated via `instrumentation_utils.make_probe_call`.
    
    These will replace previous AST utilities for extracting `Assert` statements,
    which are less robust.
    
    ghstack-source-id: 4d23be5825365c89cd7cf5a58c6ea5eeb80c88dd
    Pull Request resolved: https://github.com/google-research/triangulate/pull/14

commit a85353e117c5c441bb7e8ed6e70bb4db632f41b2
Author: Dan Zheng <[email protected]>
Date:   Mon Aug 7 11:17:59 2023 -0700

    Add instrumentation utilities.
    
    Add a `probe` function for printing local variables (if defined).
    
    Add a `run_with_instrumentation` function for executing code and returning
    stdout and stderr as output.
    
    ghstack-source-id: ee48b5c8c5b9cb22b7177a638a9904e7963baa76
    Pull Request resolved: https://github.com/google-research/triangulate/pull/13

commit fbeee61d036e461da5664e893c31b5a7951f549a
Author: Dan Zheng <[email protected]>
Date:   Mon Aug 7 11:17:55 2023 -0700

    Add logging utilities.
    
    Add utilites for colored printing: convenience wrappers around termcolor.
    
    ghstack-source-id: 327a130c534ab13e452a4257a66e883003f5eac4
    Pull Request resolved: https://github.com/google-research/triangulate/pull/12

dan-zheng avatar Aug 07 '23 19:08 dan-zheng

Okay, I found a workaround.

I had a chain of commits, A-B-C-D.

I used git rebase -i B~ and squashed BC together: A-BC-D.

After rebasing, ghstack doesn't update the pull request for BC anymore. https://github.com/google-research/triangulate/pull/16

The workaround:

  • Rebase and amend the parent of the squashed commit: git rebase -i <squashed commit>~2.
    • I guess this updates "the tree".
  • Run ghstack again. Now PRs are updated, starting with the parent of the squashed commit.

I don't know how to apply this workaround if the squashed commit is the first PR in the chain.

dan-zheng avatar Aug 07 '23 19:08 dan-zheng