diff --git a/rust/hg-core/src/repo.rs b/rust/hg-core/src/repo.rs --- a/rust/hg-core/src/repo.rs +++ b/rust/hg-core/src/repo.rs @@ -417,6 +417,14 @@ ) } + pub fn has_subrepos(&self) -> Result { + if let Some(entry) = self.dirstate_map()?.get(HgPath::new(".hgsub"))? { + Ok(entry.state().is_tracked()) + } else { + Ok(false) + } + } + pub fn filelog(&self, path: &HgPath) -> Result { Filelog::open(self, path) } diff --git a/rust/rhg/src/main.rs b/rust/rhg/src/main.rs --- a/rust/rhg/src/main.rs +++ b/rust/rhg/src/main.rs @@ -29,7 +29,7 @@ repo: Result<&Repo, &NoRepoInCwdError>, config: &Config, ) -> Result<(), CommandError> { - check_unsupported(config, ui)?; + check_unsupported(config, repo, ui)?; let app = App::new("rhg") .global_setting(AppSettings::AllowInvalidUtf8) @@ -643,6 +643,7 @@ fn check_unsupported( config: &Config, + repo: Result<&Repo, &NoRepoInCwdError>, ui: &ui::Ui, ) -> Result<(), CommandError> { check_extensions(config)?; @@ -653,6 +654,12 @@ Err(CommandError::unsupported("$HG_PENDING"))? } + if let Ok(repo) = repo { + if repo.has_subrepos()? { + Err(CommandError::unsupported("sub-repositories"))? + } + } + if config.has_non_empty_section(b"encode") { Err(CommandError::unsupported("[encode] config"))? } diff --git a/tests/test-subrepo-deep-nested-change.t b/tests/test-subrepo-deep-nested-change.t --- a/tests/test-subrepo-deep-nested-change.t +++ b/tests/test-subrepo-deep-nested-change.t @@ -1,7 +1,3 @@ -TODO: fix rhg bugs that make this test fail when status is enabled - $ unset RHG_STATUS - - $ cat >> $HGRCPATH < [extdiff] > # for portability: diff --git a/tests/test-subrepo-missing.t b/tests/test-subrepo-missing.t --- a/tests/test-subrepo-missing.t +++ b/tests/test-subrepo-missing.t @@ -1,7 +1,3 @@ -TODO: fix rhg bugs that make this test fail when status is enabled - $ unset RHG_STATUS - - $ hg init repo $ cd repo $ hg init subrepo