Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
f2f24f05
Commit
f2f24f05
authored
Oct 31, 2017
by
Phil Hughes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed up upload feature after master merge
parent
e6a1a798
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
64 additions
and
46 deletions
+64
-46
app/assets/javascripts/repo/components/new_dropdown/index.vue
...assets/javascripts/repo/components/new_dropdown/index.vue
+1
-1
app/assets/javascripts/repo/components/new_dropdown/upload.vue
...ssets/javascripts/repo/components/new_dropdown/upload.vue
+8
-7
app/assets/javascripts/repo/components/repo_commit_section.vue
...ssets/javascripts/repo/components/repo_commit_section.vue
+1
-0
app/assets/javascripts/repo/stores/actions.js
app/assets/javascripts/repo/stores/actions.js
+3
-1
app/assets/javascripts/repo/stores/actions/file.js
app/assets/javascripts/repo/stores/actions/file.js
+7
-3
app/assets/javascripts/repo/stores/utils.js
app/assets/javascripts/repo/stores/utils.js
+8
-1
spec/javascripts/repo/components/new_dropdown/upload_spec.js
spec/javascripts/repo/components/new_dropdown/upload_spec.js
+36
-33
No files found.
app/assets/javascripts/repo/components/new_dropdown/index.vue
View file @
f2f24f05
...
...
@@ -59,7 +59,7 @@
</li>
<li>
<upload
:
current-path=
"currentP
ath"
:
path=
"p
ath"
/>
</li>
<li>
...
...
app/assets/javascripts/repo/components/new_dropdown/upload.vue
View file @
f2f24f05
<
script
>
import
eventHub
from
'
../../event_hub
'
;
import
{
mapActions
}
from
'
vuex
'
;
export
default
{
props
:
{
currentP
ath
:
{
p
ath
:
{
type
:
String
,
required
:
true
,
},
},
methods
:
{
...
mapActions
([
'
createTempEntry
'
,
]),
createFile
(
target
,
file
,
isText
)
{
const
{
name
}
=
file
;
const
nameWithPath
=
`
${
this
.
currentPath
!==
''
?
`
${
this
.
currentPath
}
/`
:
''
}${
name
}
`
;
let
{
result
}
=
target
;
if
(
!
isText
)
{
result
=
result
.
split
(
'
base64,
'
)[
1
];
}
eventHub
.
$emit
(
'
createNewEntry
'
,
{
name
:
nameWithPath
,
this
.
createTempEntry
(
{
name
,
type
:
'
blob
'
,
content
:
result
,
toggleModal
:
false
,
base64
:
!
isText
,
}
,
isText
);
});
},
readFile
(
file
)
{
const
reader
=
new
FileReader
();
...
...
app/assets/javascripts/repo/components/repo_commit_section.vue
View file @
f2f24f05
...
...
@@ -45,6 +45,7 @@ export default {
action
:
f
.
tempFile
?
'
create
'
:
'
update
'
,
file_path
:
f
.
path
,
content
:
f
.
content
,
encoding
:
f
.
base64
?
'
base64
'
:
'
text
'
,
})),
start_branch
:
createNewBranch
?
this
.
currentBranch
:
undefined
,
};
...
...
app/assets/javascripts/repo/stores/actions.js
View file @
f2f24f05
...
...
@@ -88,13 +88,15 @@ export const commitChanges = ({ commit, state, dispatch }, { payload, newMr }) =
})
.
catch
(()
=>
flash
(
'
Error committing changes. Please try again.
'
));
export
const
createTempEntry
=
({
state
,
dispatch
},
{
name
,
type
})
=>
{
export
const
createTempEntry
=
({
state
,
dispatch
},
{
name
,
type
,
content
=
''
,
base64
=
false
})
=>
{
if
(
type
===
'
tree
'
)
{
dispatch
(
'
createTempTree
'
,
name
);
}
else
if
(
type
===
'
blob
'
)
{
dispatch
(
'
createTempFile
'
,
{
tree
:
state
,
name
,
base64
,
content
,
});
}
};
...
...
app/assets/javascripts/repo/stores/actions/file.js
View file @
f2f24f05
...
...
@@ -80,16 +80,18 @@ export const changeFileContent = ({ commit }, { file, content }) => {
commit
(
types
.
UPDATE_FILE_CONTENT
,
{
file
,
content
});
};
export
const
createTempFile
=
({
state
,
commit
,
dispatch
},
{
tree
,
name
})
=>
{
export
const
createTempFile
=
({
state
,
commit
,
dispatch
},
{
tree
,
name
,
content
=
''
,
base64
=
''
})
=>
{
const
file
=
createTemp
({
name
:
name
.
replace
(
`
${
state
.
path
}
/`
,
''
),
path
:
tree
.
path
,
type
:
'
blob
'
,
level
:
tree
.
level
!==
undefined
?
tree
.
level
+
1
:
0
,
changed
:
true
,
content
,
base64
,
});
if
(
findEntry
(
tree
,
'
blob
'
,
file
.
name
))
return
;
if
(
findEntry
(
tree
,
'
blob
'
,
file
.
name
))
return
flash
(
`The name "
${
file
.
name
}
" is already taken in this directory.`
)
;
commit
(
types
.
CREATE_TMP_FILE
,
{
parent
:
tree
,
...
...
@@ -98,7 +100,9 @@ export const createTempFile = ({ state, commit, dispatch }, { tree, name }) => {
commit
(
types
.
TOGGLE_FILE_OPEN
,
file
);
dispatch
(
'
setFileActive
'
,
file
);
if
(
!
state
.
editMode
)
{
if
(
!
state
.
editMode
&&
!
file
.
base64
)
{
dispatch
(
'
toggleEditMode
'
,
true
);
}
return
Promise
.
resolve
(
file
);
};
app/assets/javascripts/repo/stores/utils.js
View file @
f2f24f05
...
...
@@ -24,6 +24,7 @@ export const dataStructure = () => ({
content
:
''
,
parentTreeUrl
:
''
,
renderError
:
false
,
base64
:
false
,
});
export
const
decorateData
=
(
entity
,
projectUrl
=
''
)
=>
{
...
...
@@ -37,12 +38,14 @@ export const decorateData = (entity, projectUrl = '') => {
tree_url
,
path
,
renderError
,
content
=
''
,
tempFile
=
false
,
active
=
false
,
opened
=
false
,
changed
=
false
,
parentTreeUrl
=
''
,
level
=
0
,
base64
=
false
,
}
=
entity
;
return
{
...
...
@@ -61,6 +64,8 @@ export const decorateData = (entity, projectUrl = '') => {
parentTreeUrl
,
changed
,
renderError
,
content
,
base64
,
// eslint-disable-next-line camelcase
lastCommit
:
last_commit
?
{
url
:
`
${
projectUrl
}
/commit/
${
last_commit
.
id
}
`
,
...
...
@@ -83,7 +88,7 @@ export const pushState = (url) => {
history
.
pushState
({
url
},
''
,
url
);
};
export
const
createTemp
=
({
name
,
path
,
type
,
level
,
changed
,
content
})
=>
{
export
const
createTemp
=
({
name
,
path
,
type
,
level
,
changed
,
content
,
base64
})
=>
{
const
treePath
=
path
?
`
${
path
}
/
${
name
}
`
:
name
;
return
decorateData
({
...
...
@@ -97,5 +102,7 @@ export const createTemp = ({ name, path, type, level, changed, content }) => {
content
,
parentTreeUrl
:
''
,
level
,
base64
,
renderError
:
base64
,
});
};
spec/javascripts/repo/components/new_dropdown/upload_spec.js
View file @
f2f24f05
import
Vue
from
'
vue
'
;
import
upload
from
'
~/repo/components/new_dropdown/upload.vue
'
;
import
eventHub
from
'
~/repo/event_hub
'
;
import
createComponent
from
'
../../../helpers/vue_mount_component_helper
'
;
import
store
from
'
~/repo/stores
'
;
import
{
createComponentWithStore
}
from
'
../../../helpers/vue_mount_component_helper
'
;
import
{
resetStore
}
from
'
../../helpers
'
;
describe
(
'
new dropdown upload
'
,
()
=>
{
let
vm
;
...
...
@@ -9,13 +10,17 @@ describe('new dropdown upload', () => {
beforeEach
(()
=>
{
const
Component
=
Vue
.
extend
(
upload
);
vm
=
createComponent
(
Component
,
{
currentP
ath
:
''
,
vm
=
createComponent
WithStore
(
Component
,
store
,
{
p
ath
:
''
,
});
vm
.
$mount
();
});
afterEach
(()
=>
{
vm
.
$destroy
();
resetStore
(
vm
.
$store
);
});
describe
(
'
readFile
'
,
()
=>
{
...
...
@@ -56,45 +61,43 @@ describe('new dropdown upload', () => {
name
:
'
file
'
,
};
beforeEach
(()
=>
{
spyOn
(
eventHub
,
'
$emit
'
);
});
it
(
'
emits createNewEntry event
'
,
()
=>
{
it
(
'
creates new file
'
,
(
done
)
=>
{
vm
.
createFile
(
target
,
file
,
true
);
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
createNewEntry
'
,
{
name
:
'
file
'
,
type
:
'
blob
'
,
content
:
'
content
'
,
toggleModal
:
false
,
base64
:
false
,
}
,
true
);
vm
.
$nextTick
(()
=>
{
expect
(
vm
.
$store
.
state
.
tree
.
length
).
toBe
(
1
);
expect
(
vm
.
$store
.
state
.
tree
[
0
].
name
).
toBe
(
file
.
name
);
expect
(
vm
.
$store
.
state
.
tree
[
0
].
content
).
toBe
(
target
.
result
);
done
();
});
});
it
(
'
create
NewEntry event name contains current path
'
,
(
)
=>
{
vm
.
currentP
ath
=
'
testing
'
;
it
(
'
create
s new file in path
'
,
(
done
)
=>
{
vm
.
$store
.
state
.
p
ath
=
'
testing
'
;
vm
.
createFile
(
target
,
file
,
true
);
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
createNewEntry
'
,
{
name
:
'
testing/file
'
,
type
:
'
blob
'
,
content
:
'
content
'
,
toggleModal
:
false
,
base64
:
false
,
},
true
);
vm
.
$nextTick
(()
=>
{
expect
(
vm
.
$store
.
state
.
tree
.
length
).
toBe
(
1
);
expect
(
vm
.
$store
.
state
.
tree
[
0
].
name
).
toBe
(
file
.
name
);
expect
(
vm
.
$store
.
state
.
tree
[
0
].
content
).
toBe
(
target
.
result
);
expect
(
vm
.
$store
.
state
.
tree
[
0
].
path
).
toBe
(
`testing/
${
file
.
name
}
`
);
done
();
});
});
it
(
'
splits content on base64 if binary
'
,
()
=>
{
it
(
'
splits content on base64 if binary
'
,
(
done
)
=>
{
vm
.
createFile
(
binaryTarget
,
file
,
false
);
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
createNewEntry
'
,
{
name
:
'
file
'
,
type
:
'
blob
'
,
content
:
'
base64content
'
,
toggleModal
:
false
,
base64
:
true
,
},
false
);
vm
.
$nextTick
(()
=>
{
expect
(
vm
.
$store
.
state
.
tree
.
length
).
toBe
(
1
);
expect
(
vm
.
$store
.
state
.
tree
[
0
].
name
).
toBe
(
file
.
name
);
expect
(
vm
.
$store
.
state
.
tree
[
0
].
content
).
toBe
(
binaryTarget
.
result
.
split
(
'
base64,
'
)[
1
]);
expect
(
vm
.
$store
.
state
.
tree
[
0
].
base64
).
toBe
(
true
);
done
();
});
});
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment