mirror of
https://github.com/python/cpython.git
synced 2025-08-30 21:48:47 +00:00
New policy for package imports: only a directory containing
__init__.py (or __init__.pyc/.pyo, whichever applies) is considered a package. All other subdirectories are left alone. Should make Konrad Hinsen happy!
This commit is contained in:
parent
771c6c8f7a
commit
197346fafe
1 changed files with 38 additions and 2 deletions
|
@ -636,6 +636,8 @@ is_builtin(name)
|
||||||
extern FILE *PyWin_FindRegisteredModule();
|
extern FILE *PyWin_FindRegisteredModule();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int find_init_module Py_PROTO((char *)); /* Forward */
|
||||||
|
|
||||||
static struct filedescr *
|
static struct filedescr *
|
||||||
find_module(name, path, buf, buflen, p_fp)
|
find_module(name, path, buf, buflen, p_fp)
|
||||||
char *name;
|
char *name;
|
||||||
|
@ -733,8 +735,10 @@ find_module(name, path, buf, buflen, p_fp)
|
||||||
#ifdef HAVE_STAT
|
#ifdef HAVE_STAT
|
||||||
if (stat(buf, &statbuf) == 0) {
|
if (stat(buf, &statbuf) == 0) {
|
||||||
static struct filedescr fd = {"", "", PKG_DIRECTORY};
|
static struct filedescr fd = {"", "", PKG_DIRECTORY};
|
||||||
if (S_ISDIR(statbuf.st_mode))
|
if (S_ISDIR(statbuf.st_mode)) {
|
||||||
return &fd;
|
if (find_init_module(buf))
|
||||||
|
return &fd;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/* XXX How are you going to test for directories? */
|
/* XXX How are you going to test for directories? */
|
||||||
|
@ -766,6 +770,38 @@ find_module(name, path, buf, buflen, p_fp)
|
||||||
return fdp;
|
return fdp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_STAT
|
||||||
|
/* Helper to look for __init__.py or __init__.py[co] in potential package */
|
||||||
|
static int
|
||||||
|
find_init_module(buf)
|
||||||
|
char *buf;
|
||||||
|
{
|
||||||
|
int save_len = strlen(buf);
|
||||||
|
int i = save_len;
|
||||||
|
struct stat statbuf;
|
||||||
|
|
||||||
|
if (save_len + 13 >= MAXPATHLEN)
|
||||||
|
return 0;
|
||||||
|
buf[i++] = SEP;
|
||||||
|
strcpy(buf+i, "__init__.py");
|
||||||
|
if (stat(buf, &statbuf) == 0) {
|
||||||
|
buf[save_len] = '\0';
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
i += strlen(buf+i);
|
||||||
|
if (Py_OptimizeFlag)
|
||||||
|
strcpy(buf+i, "o");
|
||||||
|
else
|
||||||
|
strcpy(buf+i, "c");
|
||||||
|
if (stat(buf, &statbuf) == 0) {
|
||||||
|
buf[save_len] = '\0';
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
buf[save_len] = '\0';
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* HAVE_STAT */
|
||||||
|
|
||||||
|
|
||||||
static int init_builtin Py_PROTO((char *)); /* Forward */
|
static int init_builtin Py_PROTO((char *)); /* Forward */
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue