eric6/Project/Project.py

changeset 8222
5994b80b8760
parent 8221
0572a215bd2f
child 8228
772103b14c18
equal deleted inserted replaced
8221:0572a215bd2f 8222:5994b80b8760
2958 Utilities.getHomeDir(), 2958 Utilities.getHomeDir(),
2959 self.tr("Project Files (*.epj);;XML Project Files (*.e4p)")) 2959 self.tr("Project Files (*.epj);;XML Project Files (*.e4p)"))
2960 2960
2961 QApplication.processEvents() 2961 QApplication.processEvents()
2962 2962
2963 if fn: 2963 if fn and self.closeProject():
2964 if self.closeProject(): 2964 with E5OverrideCursor():
2965 ok = self.__readProject(fn)
2966 if ok:
2967 self.opened = True
2968 if not self.pdata["FILETYPES"]:
2969 self.initFileTypes()
2970 else:
2971 self.updateFileTypes()
2972
2973 try:
2974 # create management directory if not present
2975 self.createProjectManagementDir()
2976 except OSError:
2977 E5MessageBox.critical(
2978 self.ui,
2979 self.tr("Create project management directory"),
2980 self.tr(
2981 "<p>The project directory <b>{0}</b> is not"
2982 " writable.</p>")
2983 .format(self.ppath))
2984 return
2985
2986 # read a user specific project file
2987 self.__readUserProperties()
2988
2965 with E5OverrideCursor(): 2989 with E5OverrideCursor():
2966 ok = self.__readProject(fn) 2990 oldState = self.isDirty()
2967 if ok: 2991 self.vcs = self.initVCS()
2968 self.opened = True 2992 if self.vcs is None and self.isDirty() == oldState:
2969 if not self.pdata["FILETYPES"]: 2993 # check, if project is version controlled
2970 self.initFileTypes() 2994 pluginManager = e5App().getObject("PluginManager")
2971 else: 2995 for indicator, vcsData in (
2972 self.updateFileTypes() 2996 pluginManager.getVcsSystemIndicators().items()
2973 2997 ):
2974 try: 2998 if os.path.exists(
2975 # create management directory if not present 2999 os.path.join(self.ppath, indicator)):
2976 self.createProjectManagementDir() 3000 if len(vcsData) > 1:
2977 except OSError: 3001 vcsList = []
2978 E5MessageBox.critical( 3002 for (
2979 self.ui, 3003 _vcsSystemStr, vcsSystemDisplay
2980 self.tr("Create project management directory"), 3004 ) in vcsData:
2981 self.tr( 3005 vcsList.append(vcsSystemDisplay)
2982 "<p>The project directory <b>{0}</b> is not" 3006 with E5OverridenCursor():
2983 " writable.</p>") 3007 res, vcs_ok = QInputDialog.getItem(
2984 .format(self.ppath)) 3008 None,
2985 return 3009 self.tr("New Project"),
2986 3010 self.tr(
2987 # read a user specific project file 3011 "Select Version Control"
2988 self.__readUserProperties() 3012 " System"),
2989 3013 vcsList,
2990 with E5OverrideCursor(): 3014 0, False)
2991 oldState = self.isDirty() 3015 if vcs_ok:
2992 self.vcs = self.initVCS()
2993 if self.vcs is None and self.isDirty() == oldState:
2994 # check, if project is version controlled
2995 pluginManager = e5App().getObject("PluginManager")
2996 for indicator, vcsData in (
2997 pluginManager.getVcsSystemIndicators().items()
2998 ):
2999 if os.path.exists(
3000 os.path.join(self.ppath, indicator)):
3001 if len(vcsData) > 1:
3002 vcsList = []
3003 for ( 3016 for (
3004 _vcsSystemStr, vcsSystemDisplay 3017 vcsSystemStr, vcsSystemDisplay
3005 ) in vcsData: 3018 ) in vcsData:
3006 vcsList.append(vcsSystemDisplay) 3019 if res == vcsSystemDisplay:
3007 with E5OverridenCursor(): 3020 vcsSystem = vcsSystemStr
3008 res, vcs_ok = QInputDialog.getItem( 3021 break
3009 None,
3010 self.tr("New Project"),
3011 self.tr(
3012 "Select Version Control"
3013 " System"),
3014 vcsList,
3015 0, False)
3016 if vcs_ok:
3017 for (
3018 vcsSystemStr, vcsSystemDisplay
3019 ) in vcsData:
3020 if res == vcsSystemDisplay:
3021 vcsSystem = vcsSystemStr
3022 break
3023 else:
3024 vcsSystem = "None"
3025 else: 3022 else:
3026 vcsSystem = "None" 3023 vcsSystem = "None"
3027 else: 3024 else:
3028 vcsSystem = vcsData[0][0] 3025 vcsSystem = "None"
3029 self.pdata["VCS"] = vcsSystem 3026 else:
3030 self.vcs = self.initVCS() 3027 vcsSystem = vcsData[0][0]
3031 self.setDirty(True) 3028 self.pdata["VCS"] = vcsSystem
3032 if ( 3029 self.vcs = self.initVCS()
3033 self.vcs is not None and 3030 self.setDirty(True)
3034 (self.vcs.vcsRegisteredState(self.ppath) != 3031 if (
3035 self.vcs.canBeCommitted) 3032 self.vcs is not None and
3036 ): 3033 (self.vcs.vcsRegisteredState(self.ppath) !=
3037 self.pdata["VCS"] = 'None' 3034 self.vcs.canBeCommitted)
3038 self.vcs = self.initVCS() 3035 ):
3039 self.closeAct.setEnabled(True) 3036 self.pdata["VCS"] = 'None'
3040 self.saveasAct.setEnabled(True) 3037 self.vcs = self.initVCS()
3041 self.actGrp2.setEnabled(True) 3038 self.closeAct.setEnabled(True)
3042 self.propsAct.setEnabled(True) 3039 self.saveasAct.setEnabled(True)
3043 self.userPropsAct.setEnabled(True) 3040 self.actGrp2.setEnabled(True)
3044 self.filetypesAct.setEnabled(True) 3041 self.propsAct.setEnabled(True)
3045 self.lexersAct.setEnabled(True) 3042 self.userPropsAct.setEnabled(True)
3046 self.sessActGrp.setEnabled(True) 3043 self.filetypesAct.setEnabled(True)
3047 self.dbgActGrp.setEnabled(True) 3044 self.lexersAct.setEnabled(True)
3048 self.menuDebuggerAct.setEnabled(True) 3045 self.sessActGrp.setEnabled(True)
3049 self.menuSessionAct.setEnabled(True) 3046 self.dbgActGrp.setEnabled(True)
3050 self.menuCheckAct.setEnabled(True) 3047 self.menuDebuggerAct.setEnabled(True)
3051 self.menuShowAct.setEnabled(True) 3048 self.menuSessionAct.setEnabled(True)
3052 self.menuDiagramAct.setEnabled(True) 3049 self.menuCheckAct.setEnabled(True)
3053 self.menuApidocAct.setEnabled(True) 3050 self.menuShowAct.setEnabled(True)
3054 self.menuPackagersAct.setEnabled(True) 3051 self.menuDiagramAct.setEnabled(True)
3055 self.pluginGrp.setEnabled( 3052 self.menuApidocAct.setEnabled(True)
3056 self.pdata["PROJECTTYPE"] in ["E6Plugin"]) 3053 self.menuPackagersAct.setEnabled(True)
3057 self.addLanguageAct.setEnabled( 3054 self.pluginGrp.setEnabled(
3058 bool(self.pdata["TRANSLATIONPATTERN"])) 3055 self.pdata["PROJECTTYPE"] in ["E6Plugin"])
3059 self.makeGrp.setEnabled( 3056 self.addLanguageAct.setEnabled(
3060 self.pdata["MAKEPARAMS"]["MakeEnabled"]) 3057 bool(self.pdata["TRANSLATIONPATTERN"]))
3061 self.menuMakeAct.setEnabled( 3058 self.makeGrp.setEnabled(
3062 self.pdata["MAKEPARAMS"]["MakeEnabled"]) 3059 self.pdata["MAKEPARAMS"]["MakeEnabled"])
3063 3060 self.menuMakeAct.setEnabled(
3064 # open a project debugger properties file being quiet 3061 self.pdata["MAKEPARAMS"]["MakeEnabled"])
3065 # about errors
3066 if Preferences.getProject("AutoLoadDbgProperties"):
3067 self.__readDebugProperties(True)
3068
3069 self.__model.projectOpened()
3070 self.projectOpenedHooks.emit()
3071 self.projectOpened.emit()
3072 3062
3073 if Preferences.getProject("SearchNewFiles"): 3063 # open a project debugger properties file being quiet
3074 self.__doSearchNewFiles() 3064 # about errors
3065 if Preferences.getProject("AutoLoadDbgProperties"):
3066 self.__readDebugProperties(True)
3075 3067
3076 # read a project tasks file 3068 self.__model.projectOpened()
3077 self.__readTasks() 3069 self.projectOpenedHooks.emit()
3078 self.ui.taskViewer.setProjectOpen(True) 3070 self.projectOpened.emit()
3079 # rescan project tasks 3071
3080 if Preferences.getProject("TasksProjectRescanOnOpen"): 3072 if Preferences.getProject("SearchNewFiles"):
3081 e5App().getObject("TaskViewer" 3073 self.__doSearchNewFiles()
3082 ).regenerateProjectTasks(quiet=True) 3074
3075 # read a project tasks file
3076 self.__readTasks()
3077 self.ui.taskViewer.setProjectOpen(True)
3078 # rescan project tasks
3079 if Preferences.getProject("TasksProjectRescanOnOpen"):
3080 e5App().getObject("TaskViewer"
3081 ).regenerateProjectTasks(quiet=True)
3082
3083 if restoreSession:
3084 # open the main script
3085 if self.pdata["MAINSCRIPT"]:
3086 if not os.path.isabs(self.pdata["MAINSCRIPT"]):
3087 ms = os.path.join(
3088 self.ppath, self.pdata["MAINSCRIPT"])
3089 else:
3090 ms = self.pdata["MAINSCRIPT"]
3091 self.sourceFile.emit(ms)
3083 3092
3084 if restoreSession: 3093 # open a project session file being quiet about errors
3085 # open the main script 3094 if reopen:
3086 if self.pdata["MAINSCRIPT"]: 3095 self.__readSession(quiet=True, indicator="_tmp")
3087 if not os.path.isabs(self.pdata["MAINSCRIPT"]): 3096 elif Preferences.getProject("AutoLoadSession"):
3088 ms = os.path.join( 3097 self.__readSession(quiet=True)
3089 self.ppath, self.pdata["MAINSCRIPT"]) 3098
3090 else: 3099 # start the VCS monitor thread
3091 ms = self.pdata["MAINSCRIPT"] 3100 if self.vcs is not None:
3092 self.sourceFile.emit(ms) 3101 self.vcs.startStatusMonitor(self)
3093 3102 self.vcs.vcsStatusMonitorData.connect(
3094 # open a project session file being quiet about errors 3103 self.__model.changeVCSStates)
3095 if reopen: 3104 self.vcs.vcsStatusMonitorStatus.connect(
3096 self.__readSession(quiet=True, indicator="_tmp") 3105 self.__statusMonitorStatus)
3097 elif Preferences.getProject("AutoLoadSession"): 3106 self.vcs.vcsStatusMonitorInfo.connect(
3098 self.__readSession(quiet=True) 3107 self.vcsStatusMonitorInfo)
3099 3108 self.vcs.vcsStatusChanged.connect(
3100 # start the VCS monitor thread 3109 self.__vcsStatusChanged)
3101 if self.vcs is not None:
3102 self.vcs.startStatusMonitor(self)
3103 self.vcs.vcsStatusMonitorData.connect(
3104 self.__model.changeVCSStates)
3105 self.vcs.vcsStatusMonitorStatus.connect(
3106 self.__statusMonitorStatus)
3107 self.vcs.vcsStatusMonitorInfo.connect(
3108 self.vcsStatusMonitorInfo)
3109 self.vcs.vcsStatusChanged.connect(
3110 self.__vcsStatusChanged)
3111 3110
3112 def reopenProject(self): 3111 def reopenProject(self):
3113 """ 3112 """
3114 Public slot to reopen the current project. 3113 Public slot to reopen the current project.
3115 """ 3114 """
3797 """ 3796 """
3798 newfn = os.path.abspath(fn) 3797 newfn = os.path.abspath(fn)
3799 newfn = self.getRelativePath(newfn) 3798 newfn = self.getRelativePath(newfn)
3800 if newfn in self.pdata[group]: 3799 if newfn in self.pdata[group]:
3801 return True 3800 return True
3802 elif group == "OTHERS": 3801 elif (
3803 if any(newfn.startswith(entry) for entry in self.pdata[group]): 3802 group == "OTHERS" and
3804 return True 3803 any(newfn.startswith(entry) for entry in self.pdata[group])
3804 ):
3805 return True
3805 3806
3806 if Utilities.isWindowsPlatform(): 3807 if Utilities.isWindowsPlatform():
3807 # try the above case-insensitive 3808 # try the above case-insensitive
3808 newfn = newfn.lower() 3809 newfn = newfn.lower()
3809 if any(entry.lower() == newfn for entry in self.pdata[group]): 3810 if any(entry.lower() == newfn for entry in self.pdata[group]):
3810 return True 3811 return True
3811 elif group == "OTHERS": 3812 elif (
3812 if any(newfn.startswith(entry.lower()) 3813 group == "OTHERS" and
3813 for entry in self.pdata[group]): 3814 any(newfn.startswith(entry.lower())
3814 return True 3815 for entry in self.pdata[group])
3816 ):
3817 return True
3815 3818
3816 return False 3819 return False
3817 3820
3818 def isProjectSource(self, fn): 3821 def isProjectSource(self, fn):
3819 """ 3822 """
4726 self.appendFile(ns) 4729 self.appendFile(ns)
4727 else: 4730 else:
4728 newFiles.append(ns) 4731 newFiles.append(ns)
4729 elif ( 4732 elif (
4730 filetype == "TRANSLATIONS" and 4733 filetype == "TRANSLATIONS" and
4731 fn not in self.pdata["TRANSLATIONS"] 4734 fn not in self.pdata["TRANSLATIONS"] and
4735 (fnmatch.fnmatch(ns, pattern) or
4736 fnmatch.fnmatch(ns, binpattern))
4732 ): 4737 ):
4733 if ( 4738 if autoInclude and AI:
4734 fnmatch.fnmatch(ns, pattern) or 4739 self.appendFile(ns)
4735 fnmatch.fnmatch(ns, binpattern) 4740 else:
4736 ): 4741 newFiles.append(ns)
4737 if autoInclude and AI:
4738 self.appendFile(ns)
4739 else:
4740 newFiles.append(ns)
4741 4742
4742 # if autoInclude is set there is no more work left 4743 # if autoInclude is set there is no more work left
4743 if (autoInclude and AI): 4744 if (autoInclude and AI):
4744 return 4745 return
4745 4746
4856 if self.pdata["VCS"] and self.pdata["VCS"] != 'None': 4857 if self.pdata["VCS"] and self.pdata["VCS"] != 'None':
4857 vcsSystem = self.pdata["VCS"] 4858 vcsSystem = self.pdata["VCS"]
4858 else: 4859 else:
4859 forProject = False 4860 forProject = False
4860 4861
4861 if forProject and self.pdata["VCS"] and self.pdata["VCS"] != 'None': 4862 if (
4862 if ( 4863 forProject and
4863 self.pudata["VCSOVERRIDE"] and 4864 self.pdata["VCS"] and
4864 not nooverride 4865 self.pdata["VCS"] != 'None' and
4865 ): 4866 self.pudata["VCSOVERRIDE"] and
4866 vcsSystem = self.pudata["VCSOVERRIDE"] 4867 not nooverride
4867 override = True 4868 ):
4869 vcsSystem = self.pudata["VCSOVERRIDE"]
4870 override = True
4868 4871
4869 if vcsSystem is not None: 4872 if vcsSystem is not None:
4870 import VCS 4873 import VCS
4871 try: 4874 try:
4872 vcs = VCS.factory(vcsSystem) 4875 vcs = VCS.factory(vcsSystem)

eric ide

mercurial