changeset 16594:5516fdf3fe24 stable

largefiles: in putlfile, ensure tempfile's directory exists prior to creation Let R be a repo served by an hg daemon on a machine with an empty largefiles cache. Pushing a largefiles repo to R will result in a no-such-file-or-directory OSError because putlfile will attempt to create a temporary file in R/.hg/largefiles, which does not yet exist. This patch also adds a regression test for this scenario.
author hlian
date Fri, 04 May 2012 14:36:40 -0400
parents e462313ef1bd
children 2de6ac4ac17c
files hgext/largefiles/proto.py tests/test-largefiles.t
diffstat 2 files changed, 29 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/largefiles/proto.py	Wed May 02 17:15:11 2012 -0700
+++ b/hgext/largefiles/proto.py	Fri May 04 14:36:40 2012 -0400
@@ -20,8 +20,10 @@
     user cache.'''
     proto.redirect()
 
-    tmpfp = util.atomictempfile(lfutil.storepath(repo, sha),
-                                createmode=repo.store.createmode)
+    path = lfutil.storepath(repo, sha)
+    util.makedirs(os.path.dirname(path))
+    tmpfp = util.atomictempfile(path, createmode=repo.store.createmode)
+
     try:
         try:
             proto.getfile(tmpfp)
--- a/tests/test-largefiles.t	Wed May 02 17:15:11 2012 -0700
+++ b/tests/test-largefiles.t	Fri May 04 14:36:40 2012 -0400
@@ -952,6 +952,31 @@
   [255]
   $ rm -rf empty
 
+Push a largefiles repository to a served empty repository
+  $ hg init r8
+  $ echo c3 > r8/f1
+  $ hg add --large r8/f1 -R r8
+  $ hg commit -m "m1" -R r8
+  Invoking status precommit hook
+  A f1
+  $ hg init empty
+  $ hg serve -R empty -d -p $HGPORT2 --pid-file hg.pid \
+  >   --config 'web.allow_push=*' --config web.push_ssl=False
+  $ cat hg.pid >> $DAEMON_PIDS
+  $ rm ${USERCACHE}/*
+  $ hg push -R r8 http://localhost:$HGPORT2
+  pushing to http://localhost:$HGPORT2/
+  searching for changes
+  searching for changes
+  remote: adding changesets
+  remote: adding manifests
+  remote: adding file changes
+  remote: added 1 changesets with 1 changes to 1 files
+  $ rm -rf empty
+
+used all HGPORTs, kill all daemons
+  $ "$TESTDIR/killdaemons.py"
+
 Clone a local repository owned by another user
 We have to simulate that here by setting $HOME and removing write permissions
   $ ORIGHOME="$HOME"