Merge lp:~sergiusens/snapcraft/organize into lp:~snappy-dev/snapcraft/core

Proposed by Sergio Schvezov
Status: Merged
Approved by: Sergio Schvezov
Approved revision: 183
Merged at revision: 182
Proposed branch: lp:~sergiusens/snapcraft/organize
Merge into: lp:~snappy-dev/snapcraft/core
Diff against target: 133 lines (+77/-1)
4 files modified
integration-tests/data/simple-make-filesets/Makefile (+12/-0)
integration-tests/data/simple-make-filesets/snapcraft.yaml (+25/-0)
integration-tests/units/jobs.pxu (+18/-0)
snapcraft/plugin.py (+22/-1)
To merge this branch: bzr merge lp:~sergiusens/snapcraft/organize
Reviewer Review Type Date Requested Status
Sergio Schvezov Approve
Ted Gould (community) Approve
Review via email: mp+271702@code.launchpad.net

Commit message

Implementation of the organize keyword from the spec

To post a comment you must log in.
Revision history for this message
Ted Gould (ted) wrote :

Small nit in the diff

review: Approve
Revision history for this message
Sergio Schvezov (sergiusens) :
lp:~sergiusens/snapcraft/organize updated
183. By Sergio Schvezov

remove obsolete check

Revision history for this message
Sergio Schvezov (sergiusens) wrote :

nit fixed

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory 'integration-tests/data/simple-make-filesets'
2=== added file 'integration-tests/data/simple-make-filesets/Makefile'
3--- integration-tests/data/simple-make-filesets/Makefile 1970-01-01 00:00:00 +0000
4+++ integration-tests/data/simple-make-filesets/Makefile 2015-09-18 20:07:38 +0000
5@@ -0,0 +1,12 @@
6+# -*- Mode: Makefile; indent-tabs-mode:t; tab-width: 4 -*-
7+
8+all:
9+ echo "file1" > file1
10+ echo "file2" > file2
11+
12+install:
13+ mkdir -p $(DESTDIR)/dir1
14+ mkdir -p $(DESTDIR)/dir2
15+ cp -a file1 $(DESTDIR)/
16+ cp -a file2 $(DESTDIR)/
17+ cp -a file1 $(DESTDIR)/dir2
18
19=== added file 'integration-tests/data/simple-make-filesets/icon.png'
20Binary files integration-tests/data/simple-make-filesets/icon.png 1970-01-01 00:00:00 +0000 and integration-tests/data/simple-make-filesets/icon.png 2015-09-18 20:07:38 +0000 differ
21=== added file 'integration-tests/data/simple-make-filesets/snapcraft.yaml'
22--- integration-tests/data/simple-make-filesets/snapcraft.yaml 1970-01-01 00:00:00 +0000
23+++ integration-tests/data/simple-make-filesets/snapcraft.yaml 2015-09-18 20:07:38 +0000
24@@ -0,0 +1,25 @@
25+name: test-package
26+version: 0.1
27+vendor: Sergio Schvezov <sergio.schvezov@canonical.com>
28+summary: Use organized filesets
29+description: organize the filesets before staging them
30+icon: icon.png
31+
32+parts:
33+ make-project:
34+ filesets:
35+ files:
36+ - share/file1
37+ - share/file2
38+ stage:
39+ - $files
40+ - new/dir1
41+ - new/dir2
42+ snap:
43+ - -new/dir1
44+ organize:
45+ file1: share/file1
46+ file2: share/file2
47+ dir1: new/dir1
48+ dir2: new/dir2
49+ source: .
50
51=== modified file 'integration-tests/units/jobs.pxu'
52--- integration-tests/units/jobs.pxu 2015-09-18 17:20:50 +0000
53+++ integration-tests/units/jobs.pxu 2015-09-18 20:07:38 +0000
54@@ -104,6 +104,24 @@
55 ${SNAPCRAFT} stage
56 test "$(./stage/bin/test)" = "Hello world"
57
58+id: snapcraft/normal/simple-make-filesets
59+plugin: shell
60+estimated_duration: 0.3
61+command:
62+ set -ex
63+ cp -rT $PLAINBOX_PROVIDER_DATA/simple-make-filesets .
64+ ${SNAPCRAFT} snap
65+ test -d ./stage/new/dir1
66+ test -d ./stage/new/dir2
67+ grep -q 'file1' ./stage/share/file1
68+ grep -q 'file2' ./stage/share/file2
69+ grep -q 'file1' ./stage/new/dir2/file1
70+ test ! -d ./snap/new/dir1
71+ test -d ./snap/new/dir2
72+ grep -q 'file1' ./snap/share/file1
73+ grep -q 'file2' ./snap/share/file2
74+ grep -q 'file1' ./snap/new/dir2/file1
75+
76 id: snapcraft/normal/simple-make-clean
77 plugin: shell
78 estimated_duration: 0.3
79
80=== modified file 'snapcraft/plugin.py'
81--- snapcraft/plugin.py 2015-09-17 20:56:09 +0000
82+++ snapcraft/plugin.py 2015-09-18 20:07:38 +0000
83@@ -19,7 +19,7 @@
84 import logging
85 import os
86 import sys
87-
88+import shutil
89 import yaml
90
91 import snapcraft
92@@ -35,6 +35,7 @@
93 'snap': [],
94 'stage': [],
95 'stage-packages': [],
96+ 'organize': {}
97 }
98
99
100@@ -220,6 +221,25 @@
101 fileset.extend(plugin_fileset)
102 return migratable_filesets(fileset, self.installdir)
103
104+ def _organize(self):
105+ organize_fileset = getattr(self.code.options, 'organize', {}) or {}
106+
107+ for key in organize_fileset:
108+ src = os.path.join(self.installdir, key)
109+ dst = os.path.join(self.installdir, organize_fileset[key])
110+
111+ os.makedirs(os.path.dirname(dst), exist_ok=True)
112+
113+ if os.path.exists(dst):
114+ logger.warning(
115+ 'Stepping over existing file for organization %r',
116+ os.path.relpath(dst, self.installdir))
117+ if os.path.isdir(dst):
118+ shutil.rmtree(dst)
119+ else:
120+ os.remove(dst)
121+ shutil.move(src, dst)
122+
123 def stage(self, force=False):
124 if not self.should_stage_run('stage', force):
125 return True
126@@ -228,6 +248,7 @@
127 return True
128
129 self.notify_stage("Staging")
130+ self._organize()
131 snap_files, snap_dirs = self._migratable_fileset_for('stage')
132
133 try:

Subscribers

People subscribed via source and target branches