msg110719 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-19 08:47 |
As discussed in python-dev mailing list, something should be add to os.mkdir() and os.makedirs() to simulate the shell's "mkdir -p" function, that is, suppress the OSError exception if the target directory exists.
Here is a patch against py3k, with code, test and doc. I add an "ensure_exist" keyword argument for both os.mkdir() and os.makedirs(), indicates weather an OSError is raised if the target directory already exists.
Since I've no windows environment, I only tested the patch on Unix. Hope someone could help test it on windows.
|
msg110720 - (view) |
Author: Giampaolo Rodola' (giampaolo.rodola) * |
Date: 2010-07-19 08:50 |
I don't think this can go into 2.7.
|
msg110721 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-19 08:57 |
I update the patch since an problem is found in doc/library/os.rst.
|
msg110750 - (view) |
Author: Isaac Morland (ijmorlan) |
Date: 2010-07-19 13:39 |
This exact issue has already been discussed in Issue 1675.
|
msg110753 - (view) |
Author: Isaac Morland (ijmorlan) |
Date: 2010-07-19 13:43 |
How different is this issue from Issue 1608579, Issue 1239890, Issue 1223238, and Issue 1314067?
|
msg110757 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-19 13:58 |
If I understander correctly, Issue 1608579, Issue 1239890, Issue 1223238, and Issue 1314067 all deal with the case that the intermediate directories already exists during creating them caused by race condition, but if the target directory(the leaf directory) already exist due to some reason, the OSError is still raised. This patch is mainly addressed on simulate the "mkdir -p" option, that is, when the target directory exists, no OSError is raised.
|
msg110770 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-07-19 16:03 |
Since this is a library issue, it can go into 3.2.
It is definitely a feature request, hence not in 2.7. Code that depends on the exception suppression would crash on an earlier release.
http://mail.python.org/pipermail/python-dev/2010-July/102027.html
Guido said "Well, it really should have behaved like mkdir -p in the first place.", so this is accepted pending patch approval.
The patch includes doc, test, and code patches.
The name 'ensure_exist' for the new parameter strikes me as wrong, as well as too long for something that will nearly always be set to True. The function always ensures that the directory exists. The question is whether it is ok that it exist previously. I strongly suggest something shorter like 'exist_ok' as an alternative.
The name 'excl' used in #
The code looks OK as far as I can read it, but someone else should look at the C code for posimodule-mkdir.
Does the use of 'base = support.TESTFN' ensure that the test junk gets cleaned up?
This versus #1675: the presenting issues are different -- parent race condition leading to error versus leaf existence leading to error. However, the patches are nearly the same and would have much the same effect. The differences:
* Test: 1675 lacks a new test; there should be one.
* New parameter name: they use different names, I do not like either. They use opposite senses -- exist_ok versus exist_bad for the new parameter. I think a good name is more important.
* Location of error suppression: this patches posixfile.mkdir; 1675 wraps it with a new os.mkdir function that does the suppression. I can see an argument for each approach.
* Propagation to parent directories: this passes exist_ok to parent mkdir(); 1675 passes exist_ok=True, so that it is never an error for parent directories to exist. This is a change in behavior and might be bad for the same reason we do not make exist_ok=True the default. In any case, I believe either patch could be changed to mimic the other.
Thus there are three choices to make before committing.
|
msg110855 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-20 03:14 |
Thanks for reviewing!
> The name 'ensure_exist' for the new parameter strikes me as wrong, as well as too long for something that will nearly always be set to True. The function always ensures that the directory exists. The question is whether it is ok that it exist previously. I strongly suggest something shorter like 'exist_ok' as an alternative.
Yes, I guess you'are right, this parameter needs to be shorter.
> Does the use of 'base = support.TESTFN' ensure that the test junk gets cleaned up?
Yes, the MakedirTests.tearDown() method will try to look for the outermost directory of "@base/dir1/dir2/dir3/dir4/dir5/dir6", so it can ensure the test directory is cleaned up.
> * Location of error suppression: this patches posixfile.mkdir; 1675 wraps it with a new os.mkdir function that does the suppression. I can see an argument for each approach.
The purpose of posix_mkdir() is to simulate a shell mkdir command, so I think the function of "-p" option should goes in to this code. A wrapper makes code more complicated.
> * Propagation to parent directories: this passes exist_ok to parent mkdir(); 1675 passes exist_ok=True, so that it is never an error for parent directories to exist. This is a change in behavior and might be bad for the same reason we do not make exist_ok=True the default. In any case, I believe either patch could be changed to mimic the other.
It seems these two ways has the same effect, I have no opinion on which to prefer.
By adopting your parameter naming suggestion and a little coding style change, I update the patch.
|
msg110991 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-07-21 02:32 |
Discussion has continued on pydev thread "mkdir -p in python". Some suggested a new function. Others questioned the details of the new behavior. Guido prefers the flag approach and imitation of mkdir -p.
"-1 on a new function (despite the constant-argument
guideline) and +1 on a flag. If it weren't for backwards compatibility
I'd just change os.makedirs() to act like mkdir -p period, but the
last opportunity we had for that was Python 3.0."
So, the patch should either leave behavior untouched or imitate -p behavior. That to me says that the parameter passed to mkdirs should be propagated to each mkdir call, as the 9299 patch does, and not set to a fixed value.
OS imports mkdir for one of posix, nt, os2, or ce modules. Since these do not have private '_xx' names and might be imported directly, I think the C-coded mkdir should have the parameter too, as the 9299 patch already does.
The patch changes posixmodule.c. Are all of posix, nt, os2, and ce created from the one file, or is does the patch need to change other C files?
The patch simply augments the very skimpy docstring with
"[, exist_ok=False]". Please add something after "Create a directory." like "If exist_ok is False, raise BlahError if the path already exists." Many doc strings are so terse as to be barely usable, but this is not a requirement. See help(compile) for one that is complete.
|
msg110995 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-21 03:04 |
Thanks for conclusion! I'll try to check and improve my patch.
|
msg111005 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-21 04:23 |
I update my patch with improved doc string of posix_mkdir.
By the way, after I search in the source, I could not find the "nt", "os2", "ce" modules, I guess these modules only exist in python source at one time, maybe very earlier releases, but not now.
|
msg111011 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-07-21 06:41 |
On windows, I can only import nt, not posix, ce, os2.
>>> import posix
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
import posix
ImportError: No module named posix
>>> import nt
>>> dir(nt)
['F_OK', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'R_OK', 'TMP_MAX', 'W_OK', 'X_OK', '__doc__', '__name__', '__package__', '_exit', '_getfullpathname', 'abort', 'access', 'chdir', 'chmod', 'close', 'closerange', 'device_encoding', 'dup', 'dup2', 'environ', 'error', 'execv', 'execve', 'fstat', 'fsync', 'getcwd', 'getcwdb', 'getpid', 'isatty', 'listdir', 'lseek', 'lstat', 'mkdir', 'open', 'pipe', 'putenv', 'read', 'remove', 'rename', 'rmdir', 'spawnv', 'spawnve', 'startfile', 'stat', 'stat_float_times', 'stat_result', 'statvfs_result', 'strerror', 'system', 'times', 'umask', 'unlink', 'urandom', 'utime', 'waitpid', 'write']
I guessed there might be some trickery because I say the ifdef Windows in posixmodule.c.
|
msg111014 - (view) |
Author: Guido van Rossum (gvanrossum) * |
Date: 2010-07-21 07:08 |
On Wed, Jul 21, 2010 at 3:32 AM, Terry J. Reedy <report@bugs.python.org> wrote:
>
> Terry J. Reedy <tjreedy@udel.edu> added the comment:
>
> Discussion has continued on pydev thread "mkdir -p in python". Some suggested a new function. Others questioned the details of the new behavior. Guido prefers the flag approach and imitation of mkdir -p.
>
> "-1 on a new function (despite the constant-argument
> guideline) and +1 on a flag. If it weren't for backwards compatibility
> I'd just change os.makedirs() to act like mkdir -p period, but the
> last opportunity we had for that was Python 3.0."
>
> So, the patch should either leave behavior untouched or imitate -p behavior. That to me says that the parameter passed to mkdirs should be propagated to each mkdir call, as the 9299 patch does, and not set to a fixed value.
Hm. I wonder if os.mkdir() should not be left alone (so as to continue
to match the system call most exactly, as is our convention) and the
extra functionality added to os.makedirs() only.
|
msg111018 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-21 08:00 |
I found in Modules/posixmodule.c that:
#if (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__)) && !defined(__QNX__)
#define INITFUNC PyInit_nt
#define MODNAME "nt"
#elif defined(PYOS_OS2)
#define INITFUNC PyInit_os2
#define MODNAME "os2"
#else
#define INITFUNC PyInit_posix
#define MODNAME "posix"
#endif
I also found the "ce" module in Python Windows CE (http://pythonce.sourceforge.net/) source: Modules/posixmodule.c, seeing http://docs.python.org/py3k/using/windows.html. This means the "nt", "os2", "ce", "posix" module are all implemented in Modules/posixmodule.c.
|
msg111120 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-07-21 21:04 |
Guido: "Hm. I wonder if os.mkdir() should not be left alone (so as to continue to match the system call most exactly, as is our convention) and the extra functionality added to os.makedirs() only."
Sticking with that convention seems like a good idea. That would imply wrapping the mkdir call within makedirs as something like
try:
mkdir(...)
except (<errs to be caught>:
if not exist_ok:
raise
mkdir could be changed in the future but not unchanged once changed.
Ray, can you make a simplified patch that leaves posixmodule.c alone, and make sure it passes the old and new tests? I am 99% sure some version will be applied for 3.2.
|
msg111150 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-22 05:34 |
Agree! Sure, the functions in os are mainly to simulate the system call but not the system command. This seems like a good suggestion.
So here is the new patch which leave posixmodule.c alone and just wrappers os.mkdir() with try...except... in os.makedirs().
|
msg111514 - (view) |
Author: Arfrever Frehtes Taifersar Arahesis (Arfrever) * |
Date: 2010-07-25 00:15 |
I suggest to raise exception when target regular file exists:
try:
mkdir(name, mode)
except OSError as e:
if not (exist_ok and e.errno == errno.EEXIST and path.isdir(name)):
raise
|
msg111517 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-07-25 01:27 |
Ray, what does mkdir -p do if the last target name exists but is a regular file rather than a directory? A slightly separate question is 'What do we want mkdirs to do (in this case)?'
|
msg111609 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-26 13:26 |
Oh, I'm sorry, I forgot about that case.
I agree with Arfrever, we should suppress the OSError only if the target file exists as a directory, but not other types. That is, the "exist_ok" argument in makedirs() should mean "dir existing is ok", only existing of the exact same thing as we specified to create is ok, not other things. I will fixed this later.
Besides, I wonder what should we do if the target directory exists but with a different mode than we specified(if we specified the "mode" argument). I guess we should also raise the OSError because the existing thing is not the same as what we want.
|
msg111612 - (view) |
Author: Arfrever Frehtes Taifersar Arahesis (Arfrever) * |
Date: 2010-07-26 13:32 |
Alternatively you could call os.chmod.
|
msg111679 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-27 02:20 |
I feel we do too much things in such a function if we change the mod the target directory to the mod we specified. Does anybody feel such behavior maybe dangerous? Because if the function success, we know nothing about weather we create a new directory or we convert an existing directory to the directory we need.
|
msg111680 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-07-27 02:55 |
What does mkdir -p do, which would at least be a starting point?
|
msg111681 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-27 03:36 |
I want to explain "mkdir -p" as this:
We want to create a specified directory, if such a directory doesn't exist, then create it. If such a directory already exists, then we have already reached our goal, do nothing.
While we port this function to os.makedir(), there is a more specified information of the target directory, the "mode". If the target directory already exists but with a different mode, we need not create it, but we haven't reach our goal, yet. So we can raise a exception.
|
msg111702 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-07-27 15:48 |
If I understand, this makes the change minimal: exist_ok means that if *name* already exists as a directory with the specified permissions, then do not raise an error. OK with me. Make sure doc and doc string say something like that.
|
msg111703 - (view) |
Author: Alexander Belopolsky (belopolsky) * |
Date: 2010-07-27 16:02 |
> if *name* already exists as a directory with the specified
> permissions, then do not raise an error.
AFAICT, the code in the patch does not check permissions of the existing path(s) or even whether it is a directory or not.
|
msg111704 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-07-27 16:08 |
Yes, Arfrever brought that up and the question now is whether and how to revise it.
|
msg111705 - (view) |
Author: Arfrever Frehtes Taifersar Arahesis (Arfrever) * |
Date: 2010-07-27 16:11 |
'mkdir -p' prints error when target exists and is non-directory:
$ cd /tmp
$ touch file
$ mkdir -p file
mkdir: cannot create directory `file': File exists
|
msg111772 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-28 06:52 |
I updated the patch. Now the patch:
suppress the OSError if and only if the target directory with the same mode as we specified already exists.
|
msg111796 - (view) |
Author: Arfrever Frehtes Taifersar Arahesis (Arfrever) * |
Date: 2010-07-28 12:30 |
You haven't attached the new patch.
|
msg111798 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-07-28 12:42 |
Oh, sorry, here is the patch.
|
msg112485 - (view) |
Author: Georg Brandl (georg.brandl) * |
Date: 2010-08-02 14:59 |
Doc review: Small typo, Flase vs False. Also, exceptions are "raised" rather than "thrown" in Python land (same for the docstring). Both exception references should be :exc:`OSError`.
Otherwise, looks fine to me.
Raising priority; this should go into 3.2.
|
msg112584 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-08-03 11:56 |
> Doc review: Small typo, Flase vs False. Also, exceptions are "raised" rather than "thrown" in Python land (same for the docstring). Both exception references should be :exc:`OSError`.
Here fixed these doc problems. Thanks for reviewing! Besides, the reason why I use "throw" rather than "raise" is that I found current Doc use "throw an exception", so I think an exception is "thrown". ^_^
|
msg112585 - (view) |
Author: Georg Brandl (georg.brandl) * |
Date: 2010-08-03 12:04 |
Thanks for bringing that up, I've now fixed all these instances of "throw" that should be "raise".
|
msg113156 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-08-07 08:56 |
Since the patch cannot be applied to py3k cleanly, I update it.
|
msg122596 - (view) |
Author: Éric Araujo (eric.araujo) * |
Date: 2010-11-28 01:40 |
Patch still applies without errors. Georg, since you reviewed the patch and approved it for 3.2, I’m marking as pending and assigning to you. Tell me if I shouldn’t have.
|
msg122601 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-11-28 02:17 |
Patch is missing version-added directive and News entry. I will try to add these and re-upload for final check.
|
msg122616 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-11-28 03:43 |
I applied mkdir.diff, 08-07, patch to my current working copy, added version-added and News entry (with credit to Ray Allen) and added Ray Allen to ACKS. Uploaded as mkdirs.tr.diff
I suspect a complete test should include a linux system, but I copied os.py and test_os.py to my WinXP 3.2a3 installation and in IDLE ran
>>> from test.test_os import test_main as f; f()
The mkdir tests passed, but for what is is worth, 3 others did not:
(I have no interpretation or comment on these ;-)
======================================================================
ERROR: test_CTRL_BREAK_EVENT (test.test_os.Win32KillTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Programs\Python32\lib\test\test_os.py", line 1137, in test_CTRL_BREAK_EVENT
self._kill_with_event(signal.CTRL_BREAK_EVENT, "CTRL_BREAK_EVENT")
File "C:\Programs\Python32\lib\test\test_os.py", line 1111, in _kill_with_event
time.sleep(0.5)
WindowsError: [Error 6] The handle is invalid
======================================================================
ERROR: test_link (test.test_os.LinkTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Programs\Python32\lib\test\test_os.py", line 906, in test_link
self._test_link(self.file1, self.file2)
File "C:\Programs\Python32\lib\test\test_os.py", line 901, in _test_link
os.link(file1, file2)
AttributeError: 'module' object has no attribute 'link'
======================================================================
ERROR: test_link_bytes (test.test_os.LinkTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Programs\Python32\lib\test\test_os.py", line 910, in test_link_bytes
bytes(self.file2, sys.getfilesystemencoding()))
File "C:\Programs\Python32\lib\test\test_os.py", line 901, in _test_link
os.link(file1, file2)
AttributeError: 'module' object has no attribute 'link'
|
msg122622 - (view) |
Author: Éric Araujo (eric.araujo) * |
Date: 2010-11-28 04:12 |
All tests pass on my Debian.
(I suggest removing the unnecessary backslash before committing.)
|
msg122638 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-11-28 06:37 |
\ at end of os.py addition
|
msg122649 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-11-28 10:59 |
Thanks for Terry's addition to the patch!
On my python3.2a3 on windows(also copied os.py and test_os.py to the installation), I only get the tow "os.link" errors. And this is because the python3.2a3 hasn't the "os.link" function, and the test.LinkTests in test_os.py is added later after python3.2a3, at r86733.
I don't know Why is there a WindowsError in time.sleep(), but I cannot reproduce this Error.
|
msg122700 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-11-28 18:51 |
Afaik, those error have nothing to do with this issue. I just included them for completeness in case they were helpful to GB.
|
msg123060 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-12-02 07:08 |
I removed trailing '\' and whitespace, refreshed against current repository, removing conflicts, and committed. r86930
|
msg123083 - (view) |
Author: Terry J. Reedy (terry.reedy) * |
Date: 2010-12-02 17:32 |
Georg Brandl patched the doc changes in r86931.
Ray, for future reference, you might take a look, particularly
-.. function:: makedirs(path[, mode][, exist_ok=False])
+.. function:: makedirs(path, mode=0o777, exist_ok=False)
In 3.x, (as opposed to 2.x), the style for params with default args is to give the default if possible, *without* [] now, so the signature in the doc looks as in a def statement. I, of course, missed this.
|
msg123086 - (view) |
Author: Georg Brandl (georg.brandl) * |
Date: 2010-12-02 17:37 |
Well, you're not to blame since the patch merely extended the definition which was still using obsolete syntax anyway.
|
msg123162 - (view) |
Author: ysj.ray (ysj.ray) |
Date: 2010-12-03 02:26 |
Oh, yes, I missed that, too. I didn't pay attention to that. Thanks for pointing out it and fix it!
|
msg215084 - (view) |
Author: Guido van Rossum (gvanrossum) * |
Date: 2014-03-28 22:27 |
For anyone watching this still, the fix introduced in this issue caused a security vulnerability, see http://bugs.python.org/issue21082 .
|
|
Date |
User |
Action |
Args |
2022-04-11 14:57:04 | admin | set | github: 53545 |
2014-03-28 22:27:31 | gvanrossum | set | nosy:
+ gvanrossum messages:
+ msg215084
|
2010-12-03 02:26:38 | ysj.ray | set | messages:
+ msg123162 |
2010-12-02 17:37:17 | georg.brandl | set | messages:
+ msg123086 |
2010-12-02 17:32:00 | terry.reedy | set | messages:
+ msg123083 |
2010-12-02 07:08:10 | terry.reedy | set | status: open -> closed assignee: georg.brandl -> terry.reedy resolution: accepted -> fixed messages:
+ msg123060
|
2010-11-28 18:51:17 | terry.reedy | set | messages:
+ msg122700 |
2010-11-28 10:59:11 | ysj.ray | set | messages:
+ msg122649 |
2010-11-28 06:37:10 | terry.reedy | set | messages:
+ msg122638 |
2010-11-28 04:12:32 | eric.araujo | set | messages:
+ msg122622 |
2010-11-28 03:43:51 | terry.reedy | set | files:
+ mkdirs.tr.diff
messages:
+ msg122616 |
2010-11-28 02:17:45 | terry.reedy | set | status: pending -> open
messages:
+ msg122601 |
2010-11-28 01:40:43 | eric.araujo | set | status: open -> pending assignee: georg.brandl messages:
+ msg122596
|
2010-08-07 08:56:12 | ysj.ray | set | files:
+ mkdir.diff
messages:
+ msg113156 |
2010-08-03 12:04:10 | georg.brandl | set | messages:
+ msg112585 |
2010-08-03 11:56:17 | ysj.ray | set | files:
+ mkdir.diff
messages:
+ msg112584 |
2010-08-02 14:59:29 | georg.brandl | set | priority: normal -> critical nosy:
+ georg.brandl messages:
+ msg112485
|
2010-07-28 12:42:25 | ysj.ray | set | files:
+ mkdir.diff
messages:
+ msg111798 |
2010-07-28 12:30:24 | Arfrever | set | messages:
+ msg111796 |
2010-07-28 06:52:53 | ysj.ray | set | messages:
+ msg111772 |
2010-07-27 16:11:13 | Arfrever | set | messages:
+ msg111705 |
2010-07-27 16:08:32 | terry.reedy | set | messages:
+ msg111704 |
2010-07-27 16:02:44 | belopolsky | set | nosy:
+ belopolsky messages:
+ msg111703
|
2010-07-27 15:48:02 | terry.reedy | set | messages:
+ msg111702 |
2010-07-27 03:56:41 | gvanrossum | set | nosy:
- gvanrossum
|
2010-07-27 03:36:45 | ysj.ray | set | messages:
+ msg111681 |
2010-07-27 02:55:21 | terry.reedy | set | messages:
+ msg111680 |
2010-07-27 02:20:03 | ysj.ray | set | messages:
+ msg111679 |
2010-07-26 13:32:25 | Arfrever | set | messages:
+ msg111612 |
2010-07-26 13:26:13 | ysj.ray | set | messages:
+ msg111609 |
2010-07-25 01:27:52 | terry.reedy | set | messages:
+ msg111517 stage: patch review -> commit review |
2010-07-25 00:19:09 | Arfrever | set | title: os.mkdir() and os.makedirs() add a keyword argument to suppress "File exists" exception. -> os.makedirs(): Add a keyword argument to suppress "File exists" exception |
2010-07-25 00:15:25 | Arfrever | set | messages:
+ msg111514 |
2010-07-22 05:34:38 | ysj.ray | set | files:
+ mkdir_py3k.diff
messages:
+ msg111150 |
2010-07-21 21:04:38 | terry.reedy | set | messages:
+ msg111120 |
2010-07-21 08:00:41 | ysj.ray | set | messages:
+ msg111018 |
2010-07-21 07:08:49 | gvanrossum | set | messages:
+ msg111014 |
2010-07-21 06:41:31 | terry.reedy | set | messages:
+ msg111011 |
2010-07-21 04:23:43 | ysj.ray | set | files:
+ mkdir_py3k_updated.diff
messages:
+ msg111005 |
2010-07-21 03:04:58 | ysj.ray | set | messages:
+ msg110995 |
2010-07-21 02:32:11 | terry.reedy | set | messages:
+ msg110991 |
2010-07-21 02:13:26 | terry.reedy | link | issue1675 superseder |
2010-07-20 03:14:19 | ysj.ray | set | files:
+ mkdir_py3k_updated.diff
messages:
+ msg110855 |
2010-07-19 20:27:08 | Arfrever | set | nosy:
+ Arfrever
|
2010-07-19 17:51:29 | eric.araujo | set | nosy:
+ eric.araujo
|
2010-07-19 16:10:21 | terry.reedy | set | nosy:
+ gvanrossum, zooko, ggenellina, draghuram
|
2010-07-19 16:03:13 | terry.reedy | set | type: enhancement versions:
+ Python 3.2, - Python 2.7, Python 3.3 nosy:
+ terry.reedy
messages:
+ msg110770 resolution: accepted stage: patch review |
2010-07-19 13:58:50 | ysj.ray | set | messages:
+ msg110757 |
2010-07-19 13:43:30 | ijmorlan | set | messages:
+ msg110753 |
2010-07-19 13:39:49 | ijmorlan | set | nosy:
+ ijmorlan messages:
+ msg110750
|
2010-07-19 08:57:43 | ysj.ray | set | files:
+ mkdir_py3k.diff
messages:
+ msg110721 |
2010-07-19 08:55:58 | ysj.ray | set | files:
- mkdir_py3k.diff |
2010-07-19 08:50:25 | giampaolo.rodola | set | messages:
+ msg110720 |
2010-07-19 08:49:25 | giampaolo.rodola | set | nosy:
+ giampaolo.rodola
|
2010-07-19 08:47:34 | ysj.ray | create | |