FossilRepo

fossilrepo / fossil / signals.py
Blame History Raw 48 lines
1
"""Auto-create FossilRepository when a Project is created."""
2
3
import logging
4
5
from django.db.models.signals import post_save
6
from django.dispatch import receiver
7
8
from projects.models import Project
9
10
logger = logging.getLogger(__name__)
11
12
13
@receiver(post_save, sender=Project)
14
def create_fossil_repo(sender, instance, created, **kwargs):
15
"""When a new Project is created, create a FossilRepository record and init the .fossil file."""
16
if not created:
17
return
18
19
from fossil.models import FossilRepository
20
21
if FossilRepository.objects.filter(project=instance).exists():
22
return
23
24
filename = f"{instance.slug}.fossil"
25
repo = FossilRepository.objects.create(
26
project=instance,
27
filename=filename,
28
created_by=instance.created_by,
29
)
30
31
# Try to init the .fossil file on disk (skip if file already exists, e.g. from a clone)
32
if not repo.full_path.exists():
33
try:
34
from fossil.cli import FossilCLI
35
36
cli = FossilCLI()
37
if cli.is_available():
38
cli.init(repo.full_path)
39
repo.file_size_bytes = repo.full_path.stat().st_size if repo.exists_on_disk else 0
40
repo.save(update_fields=["file_size_bytes", "updated_at", "version"])
41
logger.info("Created fossil repo: %s", repo.full_path)
42
else:
43
logger.warning("Fossil binary not available — repo record created but .fossil file not initialized")
44
except Exception:
45
logger.exception("Failed to init fossil repo: %s", filename)
46
else:
47
logger.info("Fossil file already exists, skipping init: %s", repo.full_path)
48

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button