git_graph: Remove feature flag (#52972)

Anthony Eid created

After #52953 gets merged the git graph will be ready for it's preview
release, so we can finally remove the feature flag! AKA this PR releases
the git graph

Self-Review Checklist:

- [ ] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [ ] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [ ] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

- Add Git Graph. Can be accessed through the button on the bottom of the
git panel or the `git graph: Open` action

Change summary

Cargo.lock                        |  2 --
crates/feature_flags/src/flags.rs |  6 ------
crates/git_graph/Cargo.toml       |  1 -
crates/git_graph/src/git_graph.rs |  4 +---
crates/git_ui/Cargo.toml          |  1 -
crates/git_ui/src/commit_view.rs  | 29 +++++++++++++----------------
crates/git_ui/src/git_panel.rs    | 24 ++++++++++--------------
script/docs-suggest-publish       | 16 ++++++++--------
8 files changed, 32 insertions(+), 51 deletions(-)

Detailed changes

Cargo.lock 🔗

@@ -7132,7 +7132,6 @@ dependencies = [
  "collections",
  "db",
  "editor",
- "feature_flags",
  "fs",
  "git",
  "git_ui",
@@ -7190,7 +7189,6 @@ dependencies = [
  "ctor",
  "db",
  "editor",
- "feature_flags",
  "file_icons",
  "futures 0.3.31",
  "fuzzy",

crates/feature_flags/src/flags.rs 🔗

@@ -47,12 +47,6 @@ impl FeatureFlag for DiffReviewFeatureFlag {
     }
 }
 
-pub struct GitGraphFeatureFlag;
-
-impl FeatureFlag for GitGraphFeatureFlag {
-    const NAME: &'static str = "git-graph";
-}
-
 pub struct StreamingEditFileToolFeatureFlag;
 
 impl FeatureFlag for StreamingEditFileToolFeatureFlag {

crates/git_graph/Cargo.toml 🔗

@@ -24,7 +24,6 @@ anyhow.workspace = true
 collections.workspace = true
 db.workspace = true
 editor.workspace = true
-feature_flags.workspace = true
 git.workspace = true
 git_ui.workspace = true
 gpui.workspace = true

crates/git_graph/src/git_graph.rs 🔗

@@ -1,6 +1,5 @@
 use collections::{BTreeMap, HashMap, IndexSet};
 use editor::Editor;
-use feature_flags::{FeatureFlagAppExt as _, GitGraphFeatureFlag};
 use git::{
     BuildCommitPermalinkParams, GitHostingProviderRegistry, GitRemote, Oid, ParsedGitRemote,
     parse_git_remote_url,
@@ -732,8 +731,7 @@ pub fn init(cx: &mut App) {
     cx.observe_new(|workspace: &mut workspace::Workspace, _, _| {
         workspace.register_action_renderer(|div, workspace, _, cx| {
             div.when(
-                workspace.project().read(cx).active_repository(cx).is_some()
-                    && cx.has_flag::<GitGraphFeatureFlag>(),
+                workspace.project().read(cx).active_repository(cx).is_some(),
                 |div| {
                     let workspace = workspace.weak_handle();
 

crates/git_ui/Cargo.toml 🔗

@@ -27,7 +27,6 @@ db.workspace = true
 editor.workspace = true
 file_icons.workspace = true
 futures.workspace = true
-feature_flags.workspace = true
 fuzzy.workspace = true
 git.workspace = true
 gpui.workspace = true

crates/git_ui/src/commit_view.rs 🔗

@@ -3,7 +3,6 @@ use buffer_diff::BufferDiff;
 use collections::HashMap;
 use editor::display_map::{BlockPlacement, BlockProperties, BlockStyle};
 use editor::{Addon, Editor, EditorEvent, ExcerptRange, MultiBuffer, multibuffer_context_lines};
-use feature_flags::{FeatureFlagAppExt as _, GitGraphFeatureFlag};
 use git::repository::{CommitDetails, CommitDiff, RepoPath, is_binary_content};
 use git::status::{FileStatus, StatusCode, TrackedStatus};
 use git::{
@@ -1045,21 +1044,19 @@ impl Render for CommitViewToolbar {
                     }),
             )
             .when(!is_stash, |this| {
-                this.when(cx.has_flag::<GitGraphFeatureFlag>(), |this| {
-                    this.child(
-                        IconButton::new("show-in-git-graph", IconName::GitGraph)
-                            .icon_size(IconSize::Small)
-                            .tooltip(Tooltip::text("Show in Git Graph"))
-                            .on_click(move |_, window, cx| {
-                                window.dispatch_action(
-                                    Box::new(crate::git_panel::OpenAtCommit {
-                                        sha: sha_for_graph.clone(),
-                                    }),
-                                    cx,
-                                );
-                            }),
-                    )
-                })
+                this.child(
+                    IconButton::new("show-in-git-graph", IconName::GitGraph)
+                        .icon_size(IconSize::Small)
+                        .tooltip(Tooltip::text("Show in Git Graph"))
+                        .on_click(move |_, window, cx| {
+                            window.dispatch_action(
+                                Box::new(crate::git_panel::OpenAtCommit {
+                                    sha: sha_for_graph.clone(),
+                                }),
+                                cx,
+                            );
+                        }),
+                )
                 .children(remote_info.map(|(provider_name, url)| {
                     let icon = match provider_name.as_str() {
                         "GitHub" => IconName::Github,

crates/git_ui/src/git_panel.rs 🔗

@@ -20,7 +20,6 @@ use editor::{
     actions::ExpandAllDiffHunks,
 };
 use editor::{EditorStyle, RewrapOptions};
-use feature_flags::{FeatureFlagAppExt as _, GitGraphFeatureFlag};
 use file_icons::FileIcons;
 use futures::StreamExt as _;
 use git::commit::ParsedCommitMessage;
@@ -4529,7 +4528,6 @@ impl GitPanel {
         let commit = branch.most_recent_commit.as_ref()?.clone();
         let workspace = self.workspace.clone();
         let this = cx.entity();
-        let can_open_git_graph = cx.has_flag::<GitGraphFeatureFlag>();
 
         Some(
             h_flex()
@@ -4607,18 +4605,16 @@ impl GitPanel {
                                     ),
                             )
                         })
-                        .when(can_open_git_graph, |this| {
-                            this.child(
-                                panel_icon_button("git-graph-button", IconName::GitGraph)
-                                    .icon_size(IconSize::Small)
-                                    .tooltip(|_window, cx| {
-                                        Tooltip::for_action("Open Git Graph", &Open, cx)
-                                    })
-                                    .on_click(|_, window, cx| {
-                                        window.dispatch_action(Open.boxed_clone(), cx)
-                                    }),
-                            )
-                        }),
+                        .child(
+                            panel_icon_button("git-graph-button", IconName::GitGraph)
+                                .icon_size(IconSize::Small)
+                                .tooltip(|_window, cx| {
+                                    Tooltip::for_action("Open Git Graph", &Open, cx)
+                                })
+                                .on_click(|_, window, cx| {
+                                    window.dispatch_action(Open.boxed_clone(), cx)
+                                }),
+                        ),
                 ),
         )
     }

script/docs-suggest-publish 🔗

@@ -131,14 +131,14 @@ if [[ "$DRY_RUN" == "true" ]]; then
     echo "Would auto-apply suggestions to docs via Droid and create a draft PR."
     echo "Model: $MODEL"
     echo ""
-    
+
     # Show each suggestion file
     for file in $(echo "$MANIFEST" | jq -r '.suggestions[].file'); do
         echo "--- $file ---"
         git show "origin/$SUGGESTIONS_BRANCH:$file" 2>/dev/null || echo "(file not found)"
         echo ""
     done
-    
+
     echo -e "${YELLOW}=== END DRY RUN ===${NC}"
     echo ""
     echo "Run without --dry-run to create the PR."
@@ -213,7 +213,7 @@ fi
 FLAGGED_PRS=()
 FLAGS_FILE="$REPO_ROOT/crates/feature_flags/src/flags.rs"
 if [[ -f "$FLAGS_FILE" ]]; then
-    # Extract feature flag struct names (e.g. SubagentsFeatureFlag, GitGraphFeatureFlag)
+    # Extract feature flag struct names (e.g. SubagentsFeatureFlag)
     FLAG_NAMES=$(grep -oE 'pub struct \w+FeatureFlag' "$FLAGS_FILE" | awk '{print $3}')
     if [[ -n "$FLAG_NAMES" ]]; then
         FLAG_PATTERN=$(echo "$FLAG_NAMES" | tr '\n' '|' | sed 's/|$//')
@@ -538,10 +538,10 @@ echo -e "${GREEN}PR created:${NC} $PR_URL"
 if [[ "$KEEP_QUEUE" != "true" ]]; then
     echo ""
     echo "Resetting suggestions queue..."
-    
+
     git checkout --orphan "${SUGGESTIONS_BRANCH}-reset"
     git rm -rf . > /dev/null 2>&1 || true
-    
+
     cat > README.md << 'EOF'
 # Documentation Suggestions Queue
 
@@ -562,19 +562,19 @@ run `script/docs-suggest-publish` to create a documentation PR from these sugges
 3. At preview release, suggestions are collected into a docs PR
 4. After docs PR is created, this branch is reset
 EOF
-    
+
     mkdir -p suggestions
     echo '{"suggestions":[]}' > manifest.json
     git add README.md suggestions manifest.json
     git commit -m "Reset documentation suggestions queue
 
 Previous suggestions published in: $PR_URL"
-    
+
     # Force push required: replacing the orphan suggestions branch with a clean slate
     git push -f origin "${SUGGESTIONS_BRANCH}-reset:$SUGGESTIONS_BRANCH"
     git checkout "$ORIGINAL_BRANCH"
     git branch -D "${SUGGESTIONS_BRANCH}-reset"
-    
+
     echo "Suggestions queue reset."
 else
     git checkout "$ORIGINAL_BRANCH"