mirror of https://github.com/docker/docs.git
				
				
				
			Merge pull request #377 from docker/ensuring-set-meta-creates-parents
Ensure that SetMeta creates parent directory first
This commit is contained in:
		
						commit
						cde61e4fad
					
				|  | @ -68,7 +68,15 @@ func (f *FilesystemStore) SetMultiMeta(metas map[string][]byte) error { | |||
| func (f *FilesystemStore) SetMeta(name string, meta []byte) error { | ||||
| 	fileName := fmt.Sprintf("%s.%s", name, f.metaExtension) | ||||
| 	path := filepath.Join(f.metaDir, fileName) | ||||
| 	if err := ioutil.WriteFile(path, meta, 0600); err != nil { | ||||
| 
 | ||||
| 	// Ensures the parent directories of the file we are about to write exist
 | ||||
| 	err := os.MkdirAll(filepath.Dir(path), 0700) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	// Write the file to disk
 | ||||
| 	if err = ioutil.WriteFile(path, meta, 0600); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return nil | ||||
|  |  | |||
|  | @ -42,6 +42,21 @@ func TestSetMeta(t *testing.T) { | |||
| 	assert.Equal(t, testContent, content, "Content written to file was corrupted.") | ||||
| } | ||||
| 
 | ||||
| func TestSetMetaWithNoParentDirectory(t *testing.T) { | ||||
| 	s, err := NewFilesystemStore(testDir, "metadata", "json", "targets") | ||||
| 	assert.Nil(t, err, "Initializing FilesystemStore returned unexpected error: %v", err) | ||||
| 	defer os.RemoveAll(testDir) | ||||
| 
 | ||||
| 	testContent := []byte("test data") | ||||
| 
 | ||||
| 	err = s.SetMeta("noexist/"+"testMeta", testContent) | ||||
| 	assert.Nil(t, err, "SetMeta returned unexpected error: %v", err) | ||||
| 
 | ||||
| 	content, err := ioutil.ReadFile(path.Join(testDir, "metadata", "noexist/testMeta.json")) | ||||
| 	assert.Nil(t, err, "Error reading file: %v", err) | ||||
| 	assert.Equal(t, testContent, content, "Content written to file was corrupted.") | ||||
| } | ||||
| 
 | ||||
| func TestGetMeta(t *testing.T) { | ||||
| 	s, err := NewFilesystemStore(testDir, "metadata", "json", "targets") | ||||
| 	assert.Nil(t, err, "Initializing FilesystemStore returned unexpected error: %v", err) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue