Podshot / MCEdit-Unified

Combined MCEdit & Pymclevel repository.
http://podshot.github.io/MCEdit-Unified/
ISC License
483 stars 109 forks source link

Duplicate name error when copying regions #884

Open alphapapa opened 6 years ago

alphapapa commented 6 years ago

Hi,

As I mentioned in https://github.com/Khroki/MCEdit-Unified/issues/877, sometimes there an error happens when copying a region to the built-in clipboard. I'm guessing it happens when it's beyond a certain size, because it happened to me just now when copying a region that is 1568W x 1648L x 256H, but it didn't happen when I twice copied a much smaller region.

Clipping:  _Vector(x=1568, y=256, z=1648)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.0.1.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.0.0.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.1.0.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.0.2.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.3.1.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.2.0.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.3.3.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.2.3.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.2.1.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.0.3.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.2.2.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.1.1.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.3.0.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.3.2.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.1.2.mca'
  z.write(absfn, zfn)
/home/me/tmp/src/MCEdit-Unified/pymclevel/schematic.py:727: UserWarning: Duplicate name: 'region/r.1.3.mca'
  z.write(absfn, zfn)
[ WARNING][                   root.py:816]:Error reading chunk: [Errno 2] No such file or directory: '/tmp/tmpzv5y4lschematic/##MCEDIT.TEMP##/region/r.3.2.mca'
[ WARNING][                   root.py:816]:Error reading chunk: [Errno 2] No such file or directory: '/tmp/tmpzv5y4lschematic/##MCEDIT.TEMP##/region/r.3.2.mca'
[The error above is repeated several hundred times, then there are no further errors.]

I was watching the directory listing as the copy was running, and before the error, the files were in the correct directory, but now:

$ ls -R /tmp/tmpzv5y4lschematic                                                                     
##MCEDIT.TEMP##/  ##MCEDIT.TEMP2##/  region/  schematic.dat  session.lock

./##MCEDIT.TEMP##:
region/

./##MCEDIT.TEMP##/region:

./##MCEDIT.TEMP2##:

./region:
r.0.0.mca  r.0.2.mca  r.1.0.mca  r.1.2.mca  r.2.0.mca  r.2.2.mca  r.3.0.mca  r.3.2.mca
r.0.1.mca  r.0.3.mca  r.1.1.mca  r.1.3.mca  r.2.1.mca  r.2.3.mca  r.3.1.mca  r.3.3.mca

As you can see, the mca files are now in /tmp/tmpzv5y4lschematic/region instead of /tmp/tmpzv5y4lschematic/##MCEDIT.TEMP##/region.

Thanks.

alphapapa commented 6 years ago

To work around this, I did this:

  1. Paste the region.
  2. Symlink /tmp/tmpzv5y4lschematic/region to /tmp/tmpzv5y4lschematic/##MCEDIT.TEMP##/region.
  3. Click Import.

This caused errors:

[The beginning of the output is too long to include since the area is so large.  This is the end of the output.]
[ WARNING][                   root.py:816]:Error reading chunk: ("Chunk (69, 34) had an error: OSError(17, 'File exists')", <traceback object at 0x7f3934c42ab8>)
[ WARNING][                   root.py:816]:Error reading chunk: ("Chunk (70, 34) had an error: OSError(17, 'File exists')", <traceback object at 0x7f38f6acbe60>)
[   ERROR][                    root.py:59]:Exception:
Traceback (most recent call last):
  File "/home/me/tmp/src/MCEdit-Unified/mceutils.py", line 53, in _alertException
    return func(*args, **kw)
  File "/home/me/tmp/src/MCEdit-Unified/editortools/clone.py", line 1041, in confirm
    self.editor.addOperation(op)
  File "/home/me/tmp/src/MCEdit-Unified/leveleditor.py", line 3035, in addOperation
    self.performWithRetry(op)
  File "/home/me/tmp/src/MCEdit-Unified/leveleditor.py", line 3046, in performWithRetry
    op.perform(self.recordUndo)
  File "/home/me/tmp/src/MCEdit-Unified/editortools/clone.py", line 217, in perform
    [i.perform(False) for i in self.blockCopyOps]
  File "/home/me/tmp/src/MCEdit-Unified/editortools/clone.py", line 142, in perform
    showProgress(_("Copying {0:n} blocks...").format(self.sourceBox.volume), i)
  File "/home/me/tmp/src/MCEdit-Unified/albow/extended_widgets.py", line 359, in showProgress
    if widget.present():
  File "/home/me/tmp/src/MCEdit-Unified/albow/widget.py", line 525, in present
    self.root.run_modal(self)
  File "/home/me/tmp/src/MCEdit-Unified/albow/root.py", line 233, in run_modal
    self.gl_draw_all(self, (0, 0))
  File "/home/me/tmp/src/MCEdit-Unified/albow/widget.py", line 766, in gl_draw_all
    subwidget.gl_draw_all(root, suboffset)
  File "/home/me/tmp/src/MCEdit-Unified/albow/widget.py", line 773, in gl_draw_all
    self.draw_all(surface)
  File "/home/me/tmp/src/MCEdit-Unified/albow/widget.py", line 334, in draw_all
    self.draw(surface)
  File "/home/me/tmp/src/MCEdit-Unified/albow/extended_widgets.py", line 275, in draw
    amount = progressIterator.next()
  File "/home/me/tmp/src/MCEdit-Unified/pymclevel/block_copy.py", line 104, in copyBlocksFromIter
    sourceChunk = sourceLevel.getChunk(*srcCpos)
  File "/home/me/tmp/src/MCEdit-Unified/pymclevel/infiniteworld.py", line 1720, in getChunk
    chunkData = self._getChunkData(cx, cz)
  File "/home/me/tmp/src/MCEdit-Unified/pymclevel/infiniteworld.py", line 1679, in _getChunkData
    raise ChunkMalformed("Chunk {0} had an error: {1!r}".format((cx, cz), e), sys.exc_info()[2])
ChunkMalformed: ("Chunk (0, 8) had an error: OSError(17, 'File exists')", <traceback object at 0x7f38f7bf3200>)

Next, I did this:

  1. Remove symlink.
  2. Move /tmp/tmpzv5y4lschematic/region to /tmp/tmpzv5y4lschematic/##MCEDIT.TEMP##/region.
  3. Click the picture of the region to paste it.
  4. Click Import.

The import then proceeded without error.

Podshot commented 6 years ago

Interesting, we'll do some testing on our side, what OS are you using?

alphapapa commented 6 years ago

Using Linux, specifically Ubuntu Trusty 14.04.