Showing 1 changed files with 59 additions and 3 deletions
+59 -3
old/copy_database_v1_to_v2
... ...
@@ -56,10 +56,66 @@ unless ($new_user_count) {
56 56
   }
57 57
 }
58 58
 
59
+# Copy project data
60
+my $old_projects = $old_dbi->select(table => 'project')->all;
61
+my $new_project_count = $new_dbi->select('count(*)', table => 'project')->value;
62
+unless ($new_project_count) {
63
+  for my $old_project (@$old_projects) {
64
+    
65
+    my @new_project_columns = qw(
66
+      row_id
67
+      id
68
+      default_branch
69
+      private integer
70
+      ignore_space_change
71
+      guess_encoding
72
+    );
73
+    
74
+    my $new_project = {};
75
+    for my $new_project_column (@new_project_columns) {
76
+      if (exists $old_project->{$new_project_column}) {
77
+        $new_project->{$new_project_column} = $old_project->{$new_project_column};
78
+      }
79
+    }
80
+    
81
+    # name is copied to id
82
+    if (exists $old_project->{name}) {
83
+      $new_project->{id} = $old_project->{name};
84
+    }
85
+    
86
+    # original_pid is copied to original_project, which is converted to project.row_id
87
+    if (exists $old_project->{original_pid}) {
88
+      my $project_row_id = $old_dbi->select(
89
+        'row_id',
90
+        table => 'project',
91
+        where => {
92
+          original_pid => $old_project->{original_pid}
93
+        },
94
+        append => 'order by row_id'
95
+      )->value;
96
+      if ($project_row_id && $project_row_id ne $new_project->{row_id}) {
97
+        $new_project->{original_project} = $project_row_id;
98
+      }
99
+    }
100
+    
101
+    # user_id is copied to user, which is converted to user.row_id
102
+    my $user_row_id = $old_dbi->select(
103
+      'row_id',
104
+      table => 'user',
105
+      where => {id => $old_project->{user_id}}
106
+    )->value;
107
+    if (defined $user_row_id) {
108
+      $new_project->{user} = $user_row_id;
109
+    }
110
+    else {
111
+      next;
112
+    }
113
+    
114
+    $new_dbi->insert($new_project, table => 'project');
115
+  }
116
+}
117
+
59 118
 =pod
60
-user
61 119
 collaboration
62
-project
63
-pull_request
64 120
 ssh_public_key
65 121
 =cut