sublime-wakatime/packages/wakatime/project.py

91 lines
2.5 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
"""
wakatime.project
~~~~~~~~~~~~~~~~
Returns a project for the given file.
:copyright: (c) 2013 Alan Hamlett.
:license: BSD, see LICENSE for more details.
"""
import logging
from .projects.git import Git
from .projects.mercurial import Mercurial
2017-11-06 06:51:43 +03:00
from .projects.projectfile import ProjectFile
from .projects.projectmap import ProjectMap
from .projects.subversion import Subversion
log = logging.getLogger('WakaTime')
# List of plugin classes to find a project for the current file path.
2015-06-30 05:47:04 +03:00
CONFIG_PLUGINS = [
2017-11-06 06:51:43 +03:00
ProjectFile,
ProjectMap,
2015-06-30 05:47:04 +03:00
]
REV_CONTROL_PLUGINS = [
Git,
Mercurial,
Subversion,
]
2017-11-09 10:12:05 +03:00
def get_project_info(configs, heartbeat, data):
2015-06-30 05:47:04 +03:00
"""Find the current project and branch.
First looks for a .wakatime-project file. Second, uses the --project arg.
Third, uses the folder name from a revision control repository. Last, uses
the --alternate-project arg.
Returns a project, branch tuple.
"""
2017-11-09 10:12:05 +03:00
project_name, branch_name = heartbeat.project, heartbeat.branch
2015-06-30 05:47:04 +03:00
2017-11-09 10:12:05 +03:00
if heartbeat.type != 'file':
project_name = project_name or heartbeat.args.project or heartbeat.args.alternate_project
return project_name, branch_name
2015-06-30 05:47:04 +03:00
2017-11-09 10:12:05 +03:00
if project_name is None or branch_name is None:
for plugin_cls in CONFIG_PLUGINS:
plugin_name = plugin_cls.__name__.lower()
plugin_configs = get_configs_for_plugin(plugin_name, configs)
2015-06-30 05:47:04 +03:00
2017-11-09 10:12:05 +03:00
project = plugin_cls(heartbeat.entity, configs=plugin_configs)
if project.process():
project_name = project_name or project.name()
branch_name = project.branch()
break
2015-06-30 05:47:04 +03:00
if project_name is None:
2017-11-09 10:12:05 +03:00
project_name = data.get('project') or heartbeat.args.project
2015-06-30 05:47:04 +03:00
if project_name is None or branch_name is None:
for plugin_cls in REV_CONTROL_PLUGINS:
plugin_name = plugin_cls.__name__.lower()
plugin_configs = get_configs_for_plugin(plugin_name, configs)
2017-11-09 10:12:05 +03:00
project = plugin_cls(heartbeat.entity, configs=plugin_configs)
2015-06-30 05:47:04 +03:00
if project.process():
project_name = project_name or project.name()
branch_name = branch_name or project.branch()
break
if project_name is None:
2017-11-09 10:12:05 +03:00
project_name = data.get('alternate_project') or heartbeat.args.alternate_project
2015-06-30 05:47:04 +03:00
return project_name, branch_name
def get_configs_for_plugin(plugin_name, configs):
if configs and configs.has_section(plugin_name):
return dict(configs.items(plugin_name))
2013-07-21 21:44:23 +04:00
return None