git. как получить список всех веток

Изображение пользователя nitrofox.

как можно получить список всех веток и тегов https://github.com/boostorg/boost.git ?

+2
DarkneSS - 25 Июнь, 2016 - 11:39
Изображение пользователя DarkneSS.

Первое, что нашёл: git ls-remote, но должно быть что-то более очевидное.
Upd: git show-ref вот.

+2
MacLeod - 25 Июнь, 2016 - 16:01
Изображение пользователя MacLeod.

Могу порекомендовать (для общего развития) - https://git-scm.com/book/ru/v2.

0
nitrofox - 25 Июнь, 2016 - 22:51
Изображение пользователя nitrofox.

Ну когда я покупал ssd мне посоветовали написать скрипт который бы устанавливал нужные мне программы.. Вот я его все продолжаю писать. Вышло что-то такое.

Все прекрасно работает =) Вот дошли руки до автоматизации сборки программ. Я захотел чтобы можно было указать версию программы. apt.installProgram("nfb:boost", {ver : "=1.61.0"}). Вот мне нужно проверить есть ли такая версия на github.
+2
DarkneSS - 26 Июнь, 2016 - 00:59
Изображение пользователя DarkneSS.

git ls-remote https://github.com/boostorg/boost.gitРаботает.

+1
MacLeod - 26 Июнь, 2016 - 09:31
Изображение пользователя MacLeod.

Ух ты, нода =)
Можно сделать внешний вызов и разобрать выхлоп:
var exec = require('child_process').exec;

var url = 'https://github.com/boostorg/boost.git';

exec('git ls-remote ' + url, OnResponse);

function OnResponse(err, response) {
 
  if (err) {
    console.log('Чот не прокатило получить ответ от гитхаба...', err);
    return;
  }

  var strings = response.split('\n');
  var tags = [];

  for (var i in strings) {
    var column = strings[i].split('\t')[1]; //второй столбец после таба
    if (!column) continue;
    var ref = column.split('/');
    if (ref[0] == 'refs' && ref[1] == 'tags') {
      tags.push(ref[2]);
    }
  }

  console.log(tags);
}

Обратите внимание, вызов exec - асинхронный, поэтому синхронный код, написанный после него, выполнится точно раньше вызова колбэка OnResponse.

0
nitrofox - 27 Июнь, 2016 - 01:27
Изображение пользователя nitrofox.

Спасибо за очень подробную реализацию. Я стараюсь пользоваться синхронными методами. Библиотека apt.js это просто обвязка нескольких программ(dpkg, apt, add-apt-repository). Будет неприятно если эти программы начнут одновременно работать.

0
MacLeod - 27 Июнь, 2016 - 01:45
Изображение пользователя MacLeod.

Асинхронный - не значит параллельный. В данном случае хоть и выполняется внешний процесс, вызов колбэка становится в очередь.
Написание именно неблокирующего асинхронного кода - вся суть ноды. На самом деле, нода однопоточна.
Просто асинхронный подход поначалу сильно ломает мозг.
В конкретном случае, поскольку у вас появляется ожидание события, вам нужно просто задать правильную последовательность вызовов функций, к примеру, разместив код по работе с apt в функции AptInstalls(boostTags), где boostTags - параметр с тэгами, после чего сделать ее вызов из колбэка OnResponse, написав вместо console.log(tags); ее вызов - AptInstalls(tags). Тогда по событию получения данных начнется установка.
Это просто пример, вы можете организовывать код, как вам удобно. Можно использовать промисы, генераторы или даже функционал из ECMAScript 7, такой как async/await (правда, его еще не реализовали, придется использовать nodent или babel для "компиляции").

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры