download group/patterns files from remote repodata
authorZhang Qiang <qiang.z.zhang@intel.com>
Fri, 12 Apr 2013 07:23:22 +0000 (15:23 +0800)
committerZhang Qiang <qiang.z.zhang@intel.com>
Fri, 19 Apr 2013 06:53:34 +0000 (14:53 +0800)
group/patterns files are used for depanneur to create local repo

Change-Id: I1fb46fd11f52f0db7e067b4b8acfc7a8c391d430

gitbuildsys/cmd_build.py
gitbuildsys/utils.py

index e241b00b5e4bbf70294234dc69e7dab85ba9ab0a..dd0ce380b38e6ec67fd7b29928451e2331cd0522 100644 (file)
@@ -103,6 +103,16 @@ def prepare_repos_and_build_conf(args, arch, profile):
         raise GbsError('No package repository specified.')
 
     repoparser = RepoParser(repos, cachedir)
+    meta_dir = os.path.join(os.environ['TIZEN_BUILD_ROOT'], 'meta')
+
+    if not os.path.exists(meta_dir):
+        os.makedirs(meta_dir)
+
+    if repoparser.group_file:
+        shutil.copy(repoparser.group_file['name'], meta_dir)
+    if repoparser.pattern_file:
+        shutil.copy(repoparser.pattern_file['name'], meta_dir)
+
     repourls = repoparser.get_repos_by_arch(arch)
     if not repourls:
         raise GbsError('no available repositories found for arch %s under the '
index 33b2fac87efd1173adc94e87bcf1541396362efb..7f92b14e8cf58779be30a3b7021ea4b43f12dc7f 100644 (file)
@@ -258,6 +258,8 @@ class RepoParser(object):
         self.cachedir = cachedir
         self.repourls  = defaultdict(list)
         self.buildconf = None
+        self.group_file = {}
+        self.pattern_file = {}
         self.standardrepos = []
         self.urlgrabber = URLGrabber()
 
@@ -394,6 +396,35 @@ class RepoParser(object):
         for repo in remotes:
             deal_with_one_repo(repo)
 
+
+        # find group/pattern files from all standard repos
+        all_repos = self.standardrepos[:]
+        for arch in self.repourls:
+            all_repos.extend(self.repourls[arch])
+        for repo in all_repos:
+            group_url = repo.pathjoin('repodata/group.xml')
+            self.group_file['name'] = self.fetch(group_url)
+            if not self.group_file['name']:
+                continue
+            with open(self.group_file['name'], 'rb') as f:
+                md5sum = hexdigest(f)
+                if 'md5sum' in self.group_file and \
+                    md5sum != self.group_file['md5sum']:
+                    log.warning('multiple differnent group files found')
+                self.group_file['md5sum'] = md5sum
+
+            pattern_url = repo.pathjoin('repodata/patterns.xml')
+            self.pattern_file['name'] = self.fetch(pattern_url)
+            if not self.pattern_file['name']:
+                log.warning('pattern/group files do not exist in the same repo')
+                continue
+            with open(self.pattern_file['name'], 'rb') as f:
+                md5sum = hexdigest(f)
+                if 'md5sum' in self.pattern_file and \
+                   md5sum != self.pattern_file['md5sum']:
+                    log.warning('multiple differnent pattern files found')
+                self.pattern_file['md5sum'] = md5sum
+
     @staticmethod
     def split_out_local_repo(repos):
         """Divide repos to local and remote parts."""