Add version control system functionality with branch management, history tracking, and merge operations

This commit is contained in:
pacnpal
2025-02-06 19:29:23 -05:00
parent 6fa807f4b6
commit f3d28817a5
26 changed files with 2935 additions and 508 deletions

View File

@@ -0,0 +1,220 @@
# Generated by Django 5.1.6 on 2025-02-06 22:00
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("contenttypes", "0002_remove_content_type_name"),
("history_tracking", "0001_initial"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name="VersionBranch",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=255, unique=True)),
("created_at", models.DateTimeField(auto_now_add=True)),
("metadata", models.JSONField(blank=True, default=dict)),
("is_active", models.BooleanField(default=True)),
(
"created_by",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
),
),
(
"parent",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="children",
to="history_tracking.versionbranch",
),
),
],
options={
"ordering": ["-created_at"],
},
),
migrations.CreateModel(
name="ChangeSet",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created_at", models.DateTimeField(auto_now_add=True)),
("description", models.TextField(blank=True)),
("metadata", models.JSONField(blank=True, default=dict)),
("dependencies", models.JSONField(blank=True, default=dict)),
(
"status",
models.CharField(
choices=[
("pending", "Pending"),
("applied", "Applied"),
("failed", "Failed"),
("reverted", "Reverted"),
],
default="pending",
max_length=20,
),
),
("object_id", models.PositiveIntegerField()),
(
"content_type",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="contenttypes.contenttype",
),
),
(
"created_by",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
),
),
(
"branch",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="changesets",
to="history_tracking.versionbranch",
),
),
],
options={
"ordering": ["-created_at"],
},
),
migrations.CreateModel(
name="VersionTag",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=255, unique=True)),
("object_id", models.PositiveIntegerField()),
("created_at", models.DateTimeField(auto_now_add=True)),
("metadata", models.JSONField(blank=True, default=dict)),
(
"branch",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="tags",
to="history_tracking.versionbranch",
),
),
(
"content_type",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="contenttypes.contenttype",
),
),
(
"created_by",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"ordering": ["-created_at"],
},
),
migrations.AddIndex(
model_name="versionbranch",
index=models.Index(fields=["name"], name="history_tra_name_cf8692_idx"),
),
migrations.AddIndex(
model_name="versionbranch",
index=models.Index(
fields=["parent"], name="history_tra_parent__c645fa_idx"
),
),
migrations.AddIndex(
model_name="versionbranch",
index=models.Index(
fields=["created_at"], name="history_tra_created_6f9fc9_idx"
),
),
migrations.AddIndex(
model_name="changeset",
index=models.Index(
fields=["branch"], name="history_tra_branch__0c1728_idx"
),
),
migrations.AddIndex(
model_name="changeset",
index=models.Index(
fields=["created_at"], name="history_tra_created_c0fe58_idx"
),
),
migrations.AddIndex(
model_name="changeset",
index=models.Index(fields=["status"], name="history_tra_status_93e04d_idx"),
),
migrations.AddIndex(
model_name="changeset",
index=models.Index(
fields=["content_type", "object_id"],
name="history_tra_content_9f97ff_idx",
),
),
migrations.AddIndex(
model_name="versiontag",
index=models.Index(fields=["name"], name="history_tra_name_38da60_idx"),
),
migrations.AddIndex(
model_name="versiontag",
index=models.Index(
fields=["branch"], name="history_tra_branch__0a9a55_idx"
),
),
migrations.AddIndex(
model_name="versiontag",
index=models.Index(
fields=["created_at"], name="history_tra_created_7a1501_idx"
),
),
migrations.AddIndex(
model_name="versiontag",
index=models.Index(
fields=["content_type", "object_id"],
name="history_tra_content_0892f3_idx",
),
),
]