Open jrajahalme opened 11 months ago
I wonder if deleting my git branch gets rid of all stgit metadata for it?
I'm sorry that is bug is affecting you. Thank you for reporting.
I'd be very interested in knowing more details about how the repo might have gotten into this state. Any details would be appreciated; a reproducing case would be amazing.
The stack metadata associated with a branch is kept in a special ref: refs/stacks/<branchname>
. So for your case, it would be refs/stacks/dns-proxy-use-original-source-address-and-port-redux-v1.14
. It can be deleted like any other ref:
git update-ref -d refs/stacks/dns-proxy-use-original-source-address-and-port-redux-v1.14
Alternatively, one can checkout the stack metadata ref and inspect or even modify the metadata.
git checkout refs/stacks/dns-proxy-use-original-source-address-and-port-redux-v1.14
There is some information about this in the stg-init(1)
man page.
Commits on the metadata branch:
$ git log
commit 892808fcbad158a60411cf1f8a09826aee06350a (HEAD)
Merge: 3c3df21d5d 85184d95fa c329a5813d
Author: Jarno Rajahalme <jarno@isovalent.com>
Date: Tue Nov 28 16:30:49 2023 +0200
rebase (reapply)
commit 3c3df21d5dcd5646088d98cd3c429dca2da61189
Author: Jarno Rajahalme <jarno@isovalent.com>
Date: Tue Nov 28 16:30:49 2023 +0200
rebase (reapply)
commit 85184d95fa05027b46b786d9a561df3d5b385b28
Author: Jarno Rajahalme <jarno@isovalent.com>
Date: Tue Nov 28 10:18:18 2023 +0200
option: Add --dnsproxy-enable-transparent
...
This is the commit that seems to have broken the metadata:
$ git show 3c3df21d5dcd5646088d98cd3c429dca2da61189
commit 3c3df21d5dcd5646088d98cd3c429dca2da61189
Author: Jarno Rajahalme <jarno@isovalent.com>
Date: Tue Nov 28 16:30:49 2023 +0200
rebase (reapply)
diff --git a/patches/dnsproxy-do-not-use-original-1 b/patches/dnsproxy-do-not-use-original-1
index 10ce364964..e1c943dedf 100644
--- a/patches/dnsproxy-do-not-use-original-1
+++ b/patches/dnsproxy-do-not-use-original-1
@@ -1,7 +1,7 @@
-Bottom: f19ba00ba50fabdc1e09157b33c73b7733abf1fc
-Top: 95aad8a0325f01ef6d623145fd5322b0ec934cb7
+Bottom: 8cb1d9d8f69b9e73343cd3388347db7bf3a0f1b8
+Top: 24bbf8d0663fe28b4c2e25956ac76315612c5141
Author: Jarno Rajahalme <jarno@isovalent.com>
-Date: 2023-11-22 15:39:38 +0200
+Date: 2023-11-28 16:30:49 +0200
dnsproxy: Do not use original source when not possible
diff --git a/patches/dnsproxy-use-original-source b/patches/dnsproxy-use-original-source
index 7d8a2969c9..aef9a2d403 100644
--- a/patches/dnsproxy-use-original-source
+++ b/patches/dnsproxy-use-original-source
@@ -1,7 +1,7 @@
-Bottom: ccccb52a6662e7d3c5c1dfb009e4ae28a3389ef1
-Top: f19ba00ba50fabdc1e09157b33c73b7733abf1fc
+Bottom: 986fa955faae17edd2462ef07c45ce9fe5e63214
+Top: 8cb1d9d8f69b9e73343cd3388347db7bf3a0f1b8
Author: Jarno Rajahalme <jarno@isovalent.com>
-Date: 2023-11-22 12:48:01 +0200
+Date: 2023-11-28 16:30:48 +0200
dnsproxy: Use original source address in connections to dns servers
diff --git a/patches/option-add-dnsproxy-enable b/patches/option-add-dnsproxy-enable
index 5431dad125..caa76a1048 100644
--- a/patches/option-add-dnsproxy-enable
+++ b/patches/option-add-dnsproxy-enable
@@ -1,7 +1,7 @@
-Bottom: 95aad8a0325f01ef6d623145fd5322b0ec934cb7
-Top: 9c95dccb645537d94e1c374ef42394aa05b63a73
+Bottom: 24bbf8d0663fe28b4c2e25956ac76315612c5141
+Top: 4e91b9efbcb0d7c515490434af23ec11d642d34e
Author: Jarno Rajahalme <jarno@isovalent.com>
-Date: 2023-11-28 16:19:11 +0200
+Date: 2023-11-28 16:30:49 +0200
option: Add --dnsproxy-enable-transparent-mode (default false)
diff --git a/stack.json b/stack.json
index db011b579f..e480664021 100644
--- a/stack.json
+++ b/stack.json
@@ -1,12 +1,13 @@
{
"version": 5,
- "prev": "bc5b3eb005a17d77e5ce9875f67d0a8313527880",
- "head": "d3eb130fccc233a3703adfef9fae537a3451d651",
- "applied": [],
- "unapplied": [
+ "prev": "c329a5813d4be802bfabccc932db10bd24bda10f",
+ "head": "85184d95fa05027b46b786d9a561df3d5b385b28",
+ "applied": [
"dnsproxy-use-original-source",
"dnsproxy-do-not-use-original-1",
- "option-add-dnsproxy-enable",
+ "option-add-dnsproxy-enable"
+ ],
+ "unapplied": [
"refresh-temp",
"dnsproxy-do-not-use-original"
],
@@ -16,13 +17,13 @@
"oid": "6500b2a7fada0920f3ec66ed4ec5ee3ac6e42c5a"
},
"dnsproxy-do-not-use-original-1": {
- "oid": "7ba68aaaa4964a64961b309baf32115aecb02d2e"
+ "oid": "afc56ec702b8c4307115d9d61400563844e9e94c"
},
"dnsproxy-use-original-source": {
- "oid": "ffbf7dae5804f57563499e75242587fb9d994beb"
+ "oid": "67cdf152accc2dd8b5f042396cf4bb4e86227fdf"
},
"option-add-dnsproxy-enable": {
- "oid": "15f9bcb90c40e32d31b82936514e745ba0eedbd6"
+ "oid": "85184d95fa05027b46b786d9a561df3d5b385b28"
},
"refresh-temp": {
"oid": "d7ea1d138e9d0c9066c0da978ce0f89c32fbc724"
Topmost commit seems empty, I must have rebased twice:
$ git show 892808fcbad158a60411cf1f8a09826aee06350a
commit 892808fcbad158a60411cf1f8a09826aee06350a
Merge: 3c3df21d5d 85184d95fa c329a5813d
Author: Jarno Rajahalme <jarno@isovalent.com>
Date: Tue Nov 28 16:30:49 2023 +0200
rebase (reapply)
Tried updating the stacks reference to to remove the top two commits, but then it fails due to "stack metedata not found" :-)
After removing the stack reference, stg init
complains with the same error as before:
$ git update-ref -d refs/stacks/dns-proxy-use-original-source-address-and-port-redux-v1.14
$ stg init
error: The reference "refs/patches/dns-proxy-use-original-source-address-and-port-redux-v1.14/dnsproxy-do-not-use-original" should have content 6500b2a7fada0920f3ec66ed4ec5ee3ac6e42c5a, actual content was ffbf7dae5804f57563499e75242587fb9d994beb
After git reset --hard <upstream branch>
stg init
complains that error: StGit stack already initialized for branch
dns-proxy-use-original-source-address-and-port-redux-v1.14`. It goes on:
$ git update-ref -d refs/stacks/dns-proxy-use-original-source-address-and-port-redux-v1.14
$ git reset --hard origin/dns-proxy-use-original-source-address-and-port-redux-v1.14
HEAD is now at 36ef55e988 option: Add --dnsproxy-enable-transparent-mode (default false)
$ stg init
error: The reference "refs/patches/dns-proxy-use-original-source-address-and-port-redux-v1.14/dnsproxy-do-not-use-original" should have content 6500b2a7fada0920f3ec66ed4ec5ee3ac6e42c5a, actual content was ffbf7dae5804f57563499e75242587fb9d994beb
$
If I create a new branch and then reset to my upstream branch I can init stgit again. IMO this shows that git update-ref -d
did not remove the stgit metadata.
So this works:
$ git checkout v1.14
$ git checkout -b stgit-test
$ git reset --hard origin/dns-proxy-use-original-source-address-and-port-redux-v1.14
$ stg init
$ stg repair
$ stg uncommit -n 3
I appreciate the details, thank you. It appears that something may be wrong with stg rebase
.
If I create a new branch and then reset to my upstream branch I can init stgit again. IMO this shows that git update-ref -d did not remove the stgit metadata.
You're right and I was too hasty with my reply. In addition to refs/stacks/<branch>
, there are also per-patch refs found in refs/patches/<branch>/<patchname>
.
The patches refs found in refs/patches/<branch>/
are meant to reconcile with the patch commit ids found in refs/stacks/<branch>:stack.json
.
It seems clear that part of the problem at play is that the stack.json
metadata has gotten out-of-sync with the refs/patches/<branch>
.
I should have recommended deleting all the refs/patches/<branch/*
refs. That would have triggered StGit to recreate those patches refs based on the main stack metadata (refs/stacks/<branch>:stack.json
).
The procedure that worked for you makes sense to me too.
Finally got to a clean state after removing all refs under 'refs/patches/dns-proxy-use-original-source-address-and-port-redux-v1.14' as well as refs/stacks/dns-proxy-use-original-source-address-and-port-redux-v1.14
, thanks!
After the refs removal stg init
worked again :-)
Just to add a data point, I started seeing this error after simply pushing a couple of patches on the stack. Haven't done a rebase in several hours (and these patches have all been pushed before). Not sure if it might be relevant but this is on a separate worktree.
I have repeatedly hit this issue when doing rebases using manual complex rebases using git. This is definitely not the right way to work with stg, but it would still be nice to just have a deinit
command that does the delete above so I can then uncommit
the stuff I would like to have on the stack. If nothing else this makes it easier to recover when my fingers perform a rebase without asking my higher brain function first. ;-)
There should be some documentation on how to remove stgit metadata form a git branch when stgit messes it's metadata and can't recover.
My branch is showing this type of error on every stgit command:
When I try to fix this with
git update-ref
to the wanted reference, it complains about another reference in the branch in the same manner. If I fix that up, it gives the first error again, and so it goes in an infinite loop.Nothing works (
stg branch --cleanup
,stg branch --delete
,stg repair
) all give the same error.I would appreciate if
stg init
had a--force
flag to reinitialize stgit metadata for the current branch!