Wed, 24 Mar 2010 08:43:48 +0000
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: