Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Laurent S
erp5
Commits
db6a2d07
Commit
db6a2d07
authored
Sep 11, 2014
by
Julien Muchembled
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
BT: when downloading from VCS, add a history comment with revision information
parent
5558216e
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
58 additions
and
18 deletions
+58
-18
product/ERP5/Document/BusinessTemplate.py
product/ERP5/Document/BusinessTemplate.py
+22
-3
product/ERP5VCS/Git.py
product/ERP5VCS/Git.py
+5
-0
product/ERP5VCS/Subversion.py
product/ERP5VCS/Subversion.py
+17
-4
product/ERP5VCS/WorkingCopy.py
product/ERP5VCS/WorkingCopy.py
+14
-11
No files found.
product/ERP5/Document/BusinessTemplate.py
View file @
db6a2d07
...
...
@@ -40,6 +40,7 @@ from Products.CMFCore.utils import getToolByName
from
Products.PythonScripts.PythonScript
import
PythonScript
from
Products.ERP5Type.Accessor.Constant
import
PropertyGetter
as
ConstantGetter
from
Products.ERP5Type.Cache
import
transactional_cached
from
Products.ERP5Type.Message
import
translateString
from
Products.ERP5Type.Utils
import
readLocalDocument
,
\
writeLocalDocument
,
\
importLocalDocument
,
\
...
...
@@ -5479,12 +5480,16 @@ Business Template is a set of definitions, such as skins, portal types and categ
if
os
.
path
.
isdir
(
bt_path
):
return
bt_path
@
transactional_cached
(
lambda
self
,
vcs
=
None
,
path
=
None
:
(
self
,
vcs
,
path
))
def
getVcsTool
(
self
,
vcs
=
None
,
path
=
None
):
@
transactional_cached
(
lambda
self
,
vcs
=
None
,
path
=
None
,
restricted
=
False
:
(
self
,
vcs
,
path
,
restricted
))
def
_getVcsTool
(
self
,
vcs
=
None
,
path
=
None
,
restricted
=
False
):
from
Products.ERP5VCS.WorkingCopy
import
getVcsTool
if
not
(
path
or
vcs
):
path
=
self
.
getExportPath
()
return
getVcsTool
(
vcs
=
vcs
,
path
=
path
).
__of__
(
self
)
return
getVcsTool
(
vcs
,
path
,
restricted
).
__of__
(
self
)
def
getVcsTool
(
self
,
vcs
=
None
,
path
=
None
):
return
self
.
_getVcsTool
(
vcs
,
path
,
True
)
def
isVcsType
(
self
,
*
vcs
):
# could be moved to Products.ERP5.Base.Base
...
...
@@ -5562,6 +5567,20 @@ Business Template is a set of definitions, such as skins, portal types and categ
prop_dict
[
pid
[:
-
5
]]
=
(
value
or
''
).
splitlines
()
self
.
_edit
(
**
prop_dict
)
from
Products.ERP5VCS.WorkingCopy
import
NotAWorkingCopyError
try
:
vcs_tool
=
self
.
_getVcsTool
(
path
=
path
)
except
NotAWorkingCopyError
:
pass
else
:
comment
=
translateString
(
'Downloaded from ${type} repository at revision ${revision}'
,
mapping
=
{
'type'
:
vcs_tool
.
title
,
'revision'
:
vcs_tool
.
getRevision
(
True
)})
workflow_tool
=
self
.
getPortalObject
().
portal_workflow
workflow_tool
.
business_template_building_workflow
.
notifyWorkflowMethod
(
self
,
'edit'
,
kw
=
{
'comment'
:
comment
})
self
.
storeTemplateItemData
()
# Create temporary modules/classes for classes defined by this BT.
...
...
product/ERP5VCS/Git.py
View file @
db6a2d07
...
...
@@ -315,6 +315,11 @@ class Git(WorkingCopy):
#except AttributeError:
# pass
def
getRevision
(
self
,
dirty
=
False
):
if
dirty
and
self
.
_git
(
'diff-index'
,
'--quiet'
,
'HEAD'
).
wait
():
return
self
.
git
(
'rev-parse'
,
'--short'
,
'HEAD'
)
+
'+'
return
self
.
git
(
'rev-parse'
,
'HEAD'
)
def
commit
(
self
,
changelog
,
added
=
(),
modified
=
(),
removed
=
()):
context
=
self
.
aq_parent
request
=
context
.
REQUEST
...
...
product/ERP5VCS/Subversion.py
View file @
db6a2d07
...
...
@@ -65,10 +65,17 @@ class Subversion(WorkingCopy):
_login_cookie_name
=
'erp5_subversion_login'
_ssl_trust_cookie_name
=
'erp5_subversion_ssl_trust'
def
__init__
(
self
,
path
):
WorkingCopy
.
__init__
(
self
,
path
)
if
path
and
not
os
.
path
.
exists
(
os
.
path
.
join
(
self
.
working_copy
,
'.svn'
)):
raise
NotAWorkingCopyError
(
self
.
working_copy
)
def
__init__
(
self
,
*
args
,
**
kw
):
WorkingCopy
.
__init__
(
self
,
*
args
,
**
kw
)
try
:
path
=
self
.
working_copy
except
AttributeError
:
return
from
pysvn
import
ClientError
try
:
self
.
getRevision
()
except
(
ClientError
,
KeyError
):
raise
NotAWorkingCopyError
(
path
)
def
setLogin
(
self
,
realm
,
user
,
password
):
"""Set login information.
...
...
@@ -159,6 +166,12 @@ class Subversion(WorkingCopy):
def
getRemoteComment
(
self
):
return
'r%s'
%
self
.
info
()[
'revision'
]
def
getRevision
(
self
,
dirty
=
False
):
r
=
self
.
info
()[
'commit_revision'
]
if
dirty
and
self
.
_getClient
().
status
(
self
.
working_copy
,
get_all
=
False
):
return
"%s+"
%
r
return
r
def
export
(
self
,
path
,
url
):
return
self
.
_getClient
().
export
(
path
,
url
)
...
...
product/ERP5VCS/WorkingCopy.py
View file @
db6a2d07
...
...
@@ -90,9 +90,9 @@ class WorkingCopy(Implicit):
if
cls
.
reference
:
cls
.
_registry
.
append
((
cls
.
reference
,
cls
))
def
__init__
(
self
,
path
=
None
):
def
__init__
(
self
,
path
=
None
,
restricted
=
False
):
if
path
:
self
.
working_copy
=
self
.
checkWorkingPath
(
path
)
self
.
working_copy
=
self
.
checkWorkingPath
(
path
,
restricted
)
def
getWorkingCopyList
(
self
):
working_copy_list
=
[]
...
...
@@ -112,7 +112,7 @@ class WorkingCopy(Implicit):
os
.
mkdir
(
path
)
self
.
working_copy
=
path
def
checkWorkingPath
(
self
,
path
):
def
checkWorkingPath
(
self
,
path
,
restricted
):
# First remove any '..' to prevent escaping.
# Note that 'normpath' ignore symlinks so it would not do it correctly.
parts
=
path
.
split
(
os
.
sep
)
...
...
@@ -125,11 +125,14 @@ class WorkingCopy(Implicit):
# Allow symlinks inside instance home.
path
=
os
.
path
.
normpath
(
path
)
real_path
=
os
.
path
.
realpath
(
path
)
for
allowed
in
getConfiguration
().
instancehome
,
gettempdir
():
if
issubdir
(
allowed
,
path
)
or
issubdir
(
allowed
,
real_path
):
return
real_path
raise
Unauthorized
(
"Unauthorized access to path %r."
" It is NOT in your Zope home instance."
%
path
)
if
restricted
and
not
any
(
issubdir
(
allowed
,
path
)
or
issubdir
(
allowed
,
real_path
)
for
allowed
in
(
getConfiguration
().
instancehome
,
gettempdir
())):
raise
Unauthorized
(
"Unauthorized access to path %r."
" It is NOT in your Zope home instance."
%
path
)
if
os
.
path
.
isdir
(
real_path
):
return
real_path
raise
NotAWorkingCopyError
(
real_path
)
def
_getCookie
(
self
,
name
,
default
=
None
):
try
:
...
...
@@ -329,16 +332,16 @@ class WorkingCopy(Implicit):
installed_bt
.
reinstall
(
object_to_update
=
object_to_update
,
force
=
0
)
def
getVcsTool
(
vcs
=
None
,
path
=
None
):
def
getVcsTool
(
vcs
=
None
,
path
=
None
,
restricted
=
False
):
if
vcs
:
for
x
in
WorkingCopy
.
_registry
:
if
x
[
0
]
==
vcs
:
return
x
[
1
](
path
)
return
x
[
1
](
path
,
restricted
)
raise
ValueError
(
"Unsupported Version Control System: %s"
%
vcs
)
elif
path
:
for
x
in
WorkingCopy
.
_registry
:
try
:
return
x
[
1
](
path
)
return
x
[
1
](
path
,
restricted
)
except
NotAWorkingCopyError
:
pass
raise
NotAWorkingCopyError
(
path
)
...
...
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