Introduced a hash value to identify a project.

Wed, 24 Mar 2010 08:43:48 +0000

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 24 Mar 2010 08:43:48 +0000
changeset 151
00c27aeede62
parent 150
6ca76837a2d4
child 152
ee3a13a0ad59

Introduced a hash value to identify a project.

DTDs/Project-5.0.dtd file | annotate | diff | comparison | revisions
E5XML/Config.py file | annotate | diff | comparison | revisions
E5XML/ProjectHandler.py file | annotate | diff | comparison | revisions
E5XML/ProjectWriter.py file | annotate | diff | comparison | revisions
Project/Project.py file | annotate | diff | comparison | revisions
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DTDs/Project-5.0.dtd	Wed Mar 24 08:43:48 2010 +0000
@@ -0,0 +1,165 @@
+<!-- This is the DTD for eric5's project file version 5.0 -->
+
+<!-- This is a copy of the Basic DTD -->
+<!ELEMENT   int         (#PCDATA)>
+<!ELEMENT   long        (#PCDATA)>
+<!ELEMENT   float       (#PCDATA)>
+<!ELEMENT   complex     (#PCDATA)>
+<!ELEMENT   bool        (#PCDATA)>
+<!ELEMENT   string      (#PCDATA)>
+<!ELEMENT   bytes       (#PCDATA)>
+<!ELEMENT   bytearray   (#PCDATA)>
+<!ELEMENT   none        EMPTY>
+
+<!ELEMENT   pickle      (#PCDATA)>
+<!ATTLIST   pickle
+    method      CDATA   #REQUIRED
+    encoding    CDATA   #REQUIRED>
+
+<!ELEMENT   key         (int | long | float | complex | string | bytes)>
+<!ELEMENT   value       (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)>
+
+<!ELEMENT   dict        (key, value)*>
+
+<!ELEMENT   tuple       (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+
+<!ELEMENT   list        (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+
+<!ELEMENT   set         (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+
+<!ELEMENT   frozenset   (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+<!-- End of the Basic DTD -->
+
+<!ELEMENT   ProgLanguage        (#PCDATA)>
+<!ATTLIST   ProgLanguage
+    mixed       CDATA   #REQUIRED>
+
+<!ELEMENT   ProjectType         (#PCDATA)>
+
+<!ELEMENT   Description         (#PCDATA)>
+
+<!ELEMENT   Version             (#PCDATA)>
+
+<!ELEMENT   Author              (#PCDATA)>
+
+<!ELEMENT   Email               (#PCDATA)>
+
+<!ELEMENT   TranslationPattern  (#PCDATA)>
+
+<!ELEMENT   TranslationsBinPath (#PCDATA)>
+
+<!ELEMENT   Source              (#PCDATA)>
+
+<!ELEMENT   Sources             (Source*)>
+
+<!ELEMENT   Form                (#PCDATA)>
+
+<!ELEMENT   Forms               (Form*)>
+
+<!ELEMENT   Translation         (#PCDATA)>
+
+<!ELEMENT   Translations        (Translation*)>
+
+<!ELEMENT   TranslationException  (#PCDATA)>
+
+<!ELEMENT   TranslationExceptions (TranslationException*)>
+
+<!ELEMENT   Resource            (#PCDATA)>
+
+<!ELEMENT   Resources           (Resource*)>
+
+<!ELEMENT   Interface           (#PCDATA)>
+
+<!ELEMENT   Interfaces          (Interface*)>
+
+<!ELEMENT   Other               (#PCDATA)>
+
+<!ELEMENT   Others              (Other*)>
+
+<!ELEMENT   MainScript          (#PCDATA)>
+
+<!ELEMENT   VcsType             (#PCDATA)>
+<!ELEMENT   VcsOptions          (dict)>
+<!ELEMENT   VcsOtherData        (dict)>
+
+<!ELEMENT   Vcs                 (VcsType?,
+                                 VcsOptions?,
+                                 VcsOtherData?)>
+
+<!ELEMENT   FiletypeAssociation EMPTY>
+<!ATTLIST   FiletypeAssociation
+    pattern     CDATA   #REQUIRED
+    type        CDATA   #REQUIRED>
+
+<!ELEMENT   FiletypeAssociations (FiletypeAssociation*)>
+
+<!ELEMENT   LexerAssociation EMPTY>
+<!ATTLIST   LexerAssociation
+    pattern     CDATA   #REQUIRED
+    lexer       CDATA   #REQUIRED>
+
+<!ELEMENT   LexerAssociations (LexerAssociation*)>
+
+<!ELEMENT   ProjectTypeSpecificData (dict)>
+
+<!ELEMENT   ProjectTypeSpecific (ExtraData?)>
+
+<!ELEMENT   DocumentationParams (dict)>
+
+<!ELEMENT   Documentation       (DocumentationParams?)>
+
+<!ELEMENT   PackagersParams     (dict)>
+
+<!ELEMENT   Packagers           (PackagersParams?)>
+
+<!ELEMENT   CheckersParams      (dict)>
+
+<!ELEMENT   Checkers            (CheckersParams?)>
+
+<!ELEMENT   OtherToolsParams    (dict)>
+
+<!ELEMENT   OtherTools          (OtherToolsParams?)>
+
+<!ELEMENT   Language            (#PCDATA)>
+
+<!ELEMENT   ProjectWordList     (#PCDATA)>
+
+<!ELEMENT   ProjectExcludeList  (#PCDATA)>
+
+<!ELEMENT   Hash                (#PCDATA)>
+
+<!ELEMENT   Project             (Language,
+                                 ProjectWordList?,
+                                 ProjectExcludeList?,
+                                 Hash,
+                                 ProgLanguage,
+                                 ProjectType,
+                                 Description?,
+                                 Version?,
+                                 Author?,
+                                 Email?,
+                                 TranslationPattern?,
+                                 TranslationsBinPath?,
+                                 Sources,
+                                 Forms,
+                                 Translations,
+                                 TranslationExceptions?,
+                                 Resources,
+                                 Interfaces,
+                                 Others,
+                                 MainScript?,
+                                 Vcs,
+                                 FiletypeAssociations,
+                                 LexerAssociations?,
+                                 Extra?,
+                                 Documentation?,
+                                 Packagers?,
+                                 Checkers?,
+                                 OtherTools?)>
+<!ATTLIST   Project
+    version     CDATA   #REQUIRED>
--- a/E5XML/Config.py	Tue Mar 23 07:48:45 2010 +0000
+++ b/E5XML/Config.py	Wed Mar 24 08:43:48 2010 +0000
@@ -11,7 +11,7 @@
 multiProjectFileFormatVersion = "4.2"
 
 # version number of the project file
-projectFileFormatVersion = "4.6"
+projectFileFormatVersion = "5.0"
 
 # version number of the user project file
 userProjectFileFormatVersion = "4.0"
--- a/E5XML/ProjectHandler.py	Tue Mar 23 07:48:45 2010 +0000
+++ b/E5XML/ProjectHandler.py	Wed Mar 24 08:43:48 2010 +0000
@@ -35,6 +35,7 @@
             'ProjectWordList' : (self.defaultStartElement, self.endProjectWordList), 
             'ProjectExcludeList' : (self.defaultStartElement, 
                                     self.endProjectExcludeList), 
+            'Hash' : (self.defaultStartElement, self.endHash), 
             'ProgLanguage' : (self.startProgLanguage, self.endProgLanguage),
             'ProjectType' : (self.defaultStartElement, self.endProjectType),
             'Description' : (self.defaultStartElement, self.endDescription),
@@ -113,6 +114,12 @@
         path = Utilities.toNativeSeparators(self.buffer)
         self.project.pdata["SPELLEXCLUDES"] = [path]
         
+    def endHash(self):
+        """
+        Handler method for the "Hash" end tag.
+        """
+        self.project.pdata["HASH"] = [self.buffer]
+        
     def startProgLanguage(self, attrs):
         """
         Handler method for the "Source" start tag.
--- a/E5XML/ProjectWriter.py	Tue Mar 23 07:48:45 2010 +0000
+++ b/E5XML/ProjectWriter.py	Wed Mar 24 08:43:48 2010 +0000
@@ -62,6 +62,9 @@
         if len(self.pdata["SPELLEXCLUDES"][0]) > 0:
             self._write("  <ProjectExcludeList>%s</ProjectExcludeList>" % \
                 Utilities.fromNativeSeparators(self.pdata["SPELLEXCLUDES"][0]))
+        
+        # do the hash
+        self._write('  <Hash>%s</Hash>' % self.pdata["HASH"][0])
         
         # do the programming language
         self._write('  <ProgLanguage mixed="%d">%s</ProgLanguage>' % \
--- a/Project/Project.py	Tue Mar 23 07:48:45 2010 +0000
+++ b/Project/Project.py	Wed Mar 24 08:43:48 2010 +0000
@@ -114,7 +114,7 @@
     keynames = [
         "PROGLANGUAGE", "MIXEDLANGUAGE", "PROJECTTYPE",
         "SPELLLANGUAGE", "SPELLWORDS", "SPELLEXCLUDES", 
-        "DESCRIPTION", "VERSION",
+        "DESCRIPTION", "VERSION", "HASH",
         "AUTHOR", "EMAIL",
         "SOURCES", "FORMS", "RESOURCES",
         "TRANSLATIONS", "TRANSLATIONPATTERN", "TRANSLATIONSBINPATH", 
@@ -300,8 +300,9 @@
         for key in self.__class__.keynames:
             self.pdata[key] = []
         self.pdata["AUTHOR"] = ['']
-        self.pdata["EMAIL"] = ['']
-        self.pdata["PROGLANGUAGE"] = ["Python"]
+        self.pdata["EMAIL"] = ['']
+        self.pdata["HASH"] = ['']
+        self.pdata["PROGLANGUAGE"] = ["Python3"]
         self.pdata["MIXEDLANGUAGE"] = [False]
         self.pdata["PROJECTTYPE"] = ["Qt4"]
         self.pdata["SPELLLANGUAGE"] = \
@@ -621,7 +622,15 @@
             for fn in self.pdata["OTHERS"]:
                 dn = os.path.dirname(fn)
                 if dn not in self.otherssubdirs:
-                    self.otherssubdirs.append(dn)
+                    self.otherssubdirs.append(dn)
+            
+            # create hash value, if it doesn't have one
+            if not self.pdata["HASH"][0]:
+                hash = str(QCrytographicHash.hash(
+                    QByteArray(self.ppath), QCryptographicHash.Sha1),
+                    encoding = "utf-8")
+                self.pdata["HASH"] = [hash]
+                self.setDirty(True)
             
         return res
 
@@ -2251,7 +2260,12 @@
             self.pluginGrp.setEnabled(self.pdata["PROJECTTYPE"][0] == "E4Plugin")
             
             self.emit(SIGNAL("projectAboutToBeCreated"))
-            
+            
+            hash = str(QCrytographicHash.hash(
+                QByteArray(self.ppath), QCryptographicHash.Sha1),
+                encoding = "utf-8")
+            self.pdata["HASH"] = [hash]
+            
             # create the project directory if it doesn't exist already
             if not os.path.isdir(self.ppath):
                 try:

eric ide

mercurial