diff --git a/nbdev/_modidx.py b/nbdev/_modidx.py index 30c90bfa4..85eeb3f9a 100644 --- a/nbdev/_modidx.py +++ b/nbdev/_modidx.py @@ -50,6 +50,7 @@ 'nbdev.config._find_nbdev_pyproject': ('api/config.html#_find_nbdev_pyproject', 'nbdev/config.py'), 'nbdev.config._get_info': ('api/config.html#_get_info', 'nbdev/config.py'), 'nbdev.config._git_repo': ('api/config.html#_git_repo', 'nbdev/config.py'), + 'nbdev.config._git_root': ('api/config.html#_git_root', 'nbdev/config.py'), 'nbdev.config._has_nbdev': ('api/config.html#_has_nbdev', 'nbdev/config.py'), 'nbdev.config._has_py': ('api/config.html#_has_py', 'nbdev/config.py'), 'nbdev.config._index_mdoc': ('api/config.html#_index_mdoc', 'nbdev/config.py'), diff --git a/nbdev/cli.py b/nbdev/cli.py index 7652b9548..a477dd4ed 100644 --- a/nbdev/cli.py +++ b/nbdev/cli.py @@ -97,7 +97,6 @@ async def nbdev_new( if name: Path(name).mkdir(exist_ok=True) os.chdir(name) - kwargs.setdefault('repo', name) nbdev_create_config.__wrapped__(**kwargs) cfg = get_config() if (Path('.git')).exists(): await _update_repo_meta(cfg) diff --git a/nbdev/config.py b/nbdev/config.py index 2d5bd060a..9c7409a4b 100644 --- a/nbdev/config.py +++ b/nbdev/config.py @@ -51,7 +51,13 @@ def _get_info(owner, repo, default_branch='main', default_kw='nbdev'): return r.default_branch, default_kw if not getattr(r, 'topics', []) else ' '.join(r.topics), r.description # %% ../nbs/api/01_config.ipynb #35d5c037 -def _fetch_from_git(raise_err=False): +def _git_root(raise_err=False): + "Root of the current git repository, or `None` if there isn't one." + try: return Path(run('git rev-parse --show-toplevel').strip()).resolve() + except OSError: + if raise_err: raise + +def _fetch_from_git(raise_err=False, path=None): "Get information for pyproject.toml from git." res={} try: @@ -59,6 +65,7 @@ def _fetch_from_git(raise_err=False): res['author_email'] = run('git config --get user.email').strip() except OSError as e: if raise_err: raise e + if path is not None and _git_root(raise_err)!=Path(path).resolve(): return res try: url = run('git config --get remote.origin.url') res['user'],res['repo'] = repo_details(url) @@ -123,7 +130,7 @@ def nbdev_create_config( path.mkdir(exist_ok=True, parents=True) # Infer from git if not provided - inf,ucfg = _fetch_from_git(),_user_config() + inf,ucfg = _fetch_from_git(path=path),_user_config() repo = repo or inf.get('repo') or path.resolve().name user = user or inf.get('user') or ucfg.get('user', '') if not user: raise ValueError("Could not infer `user` from git. Please pass --user explicitly.") diff --git a/nbs/api/01_config.ipynb b/nbs/api/01_config.ipynb index aeb5e9465..2c6145466 100644 --- a/nbs/api/01_config.ipynb +++ b/nbs/api/01_config.ipynb @@ -170,7 +170,13 @@ "outputs": [], "source": [ "#| export\n", - "def _fetch_from_git(raise_err=False):\n", + "def _git_root(raise_err=False):\n", + " \"Root of the current git repository, or `None` if there isn't one.\"\n", + " try: return Path(run('git rev-parse --show-toplevel').strip()).resolve()\n", + " except OSError:\n", + " if raise_err: raise\n", + "\n", + "def _fetch_from_git(raise_err=False, path=None):\n", " \"Get information for pyproject.toml from git.\"\n", " res={}\n", " try:\n", @@ -178,6 +184,7 @@ " res['author_email'] = run('git config --get user.email').strip()\n", " except OSError as e:\n", " if raise_err: raise e\n", + " if path is not None and _git_root(raise_err)!=Path(path).resolve(): return res\n", " try:\n", " url = run('git config --get remote.origin.url')\n", " res['user'],res['repo'] = repo_details(url)\n", @@ -197,7 +204,10 @@ "outputs": [], "source": [ "#| hide\n", - "#test_eq(_fetch_from_git(raise_err=True)['lib_name'], 'nbdev')" + "root = _git_root()\n", + "with tempfile.TemporaryDirectory(dir=root) as d, working_directory(d):\n", + " inf = _fetch_from_git(path='.')\n", + " test_is(inf.get('repo'), None)" ] }, { @@ -269,7 +279,7 @@ " path.mkdir(exist_ok=True, parents=True)\n", " \n", " # Infer from git if not provided\n", - " inf,ucfg = _fetch_from_git(),_user_config()\n", + " inf,ucfg = _fetch_from_git(path=path),_user_config()\n", " repo = repo or inf.get('repo') or path.resolve().name\n", " user = user or inf.get('user') or ucfg.get('user', '')\n", " if not user: raise ValueError(\"Could not infer `user` from git. Please pass --user explicitly.\")\n", diff --git a/nbs/api/13_cli.ipynb b/nbs/api/13_cli.ipynb index f96763beb..a7c382ed1 100644 --- a/nbs/api/13_cli.ipynb +++ b/nbs/api/13_cli.ipynb @@ -197,7 +197,6 @@ " if name:\n", " Path(name).mkdir(exist_ok=True)\n", " os.chdir(name)\n", - " kwargs.setdefault('repo', name)\n", " nbdev_create_config.__wrapped__(**kwargs)\n", " cfg = get_config()\n", " if (Path('.git')).exists(): await _update_repo_meta(cfg)\n",