hg cherry-pick

#hg

Включаем расширение transplant - добавляем в .hg/hgrc:

[extensions]
transplant=

Выполняем перенос коммитов в текущую ветку:

hg transplant -b <имя ветки из которой мы хотим скопировать коммит> <номер или хэш коммита 1> <номер или хэш коммита 2>  <номер или хэш коммита N>
function arrayToCsv(array $data): string
{
    $fh = fopen('php://temp', 'rw');

    fputcsv($fh, array_keys(current($data)), ';');

    foreach ($data as $row) {
        $row = array_map(
            function ($value) {
                return mb_convert_encoding($value, 'windows-1251', 'utf-8');
            },
            $row
        );

        fputcsv($fh, $row, ';');
    }

    rewind($fh);

    $csv = stream_get_contents($fh);

    fclose($fh);

    return $csv;
}

Формат подходит для excel.

visually-hidden

.visually-hidden {
    position: absolute !important;
    clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
    clip: rect(1px, 1px, 1px, 1px);
    padding:0 !important;
    border:0 !important;
    height: 1px !important; 
    width: 1px !important; 
    overflow: hidden;
}

Ветки

Создать ветку:

hg branch my_branch_name_123
hg push --new-branch

Переключить ветку:

git update my_branch_name_123

Узнать в какой мы ветке:

hg branch

Изменения

Цветной diff:

hg diff --color always | less -R

Сбросить изменения на локальной копии:

hg update -C

Сбросить изменения отдельного файла:

hg revert filename.txt

Список измененных файлов:

hg status

Коммиты

История коммитов:

hg log --color always | less -R

Забрать коммиты:

git pull

Отправить коммиты:

git push

Создать коммит:

Чтобы передать данные, например, из шаблона компонента в шаблон сайта можно воспользоваться функционалом отложенных функций.

ShowViewContent это обычная отложенная функция такая же как и SetTitle или SetPageProperty.

Поэтому вывод контента с помощью ShowViewContent может быть выше по коду, чем передача самого контента с помощью AddViewContent или с помощью SetViewTarget + EndViewTarget.

Передаём контент в буферизируемую область:

$APPLICATION->AddViewContent('myContentBlockName', '<p>Hello</p>');

И указываем где нужно выводить содержимое этой буферизируемой области, но только в некешируемой части, например в шаблоне сайта:

Как создать ключ с помощью php?

// генерируем ключ
$keyResource = openssl_pkey_new([
    'private_key_bits' => 2048,
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
]);

echo gettype($keyResource) . PHP_EOL; // resource

// получаем приватный ключ
openssl_pkey_export(
    $keyResource,
    $privateKey
);

echo $privateKey;
// -----BEGIN PRIVATE KEY-----
// MIIEvgIBADANBgkqhkiG9w0BAQEF...
// ...
// -----END PRIVATE KEY-----

// сохраняем приватный ключ в файл
file_put_contents(
    'php-private-key.pem', 
    $privateKey
);

// получаем публичный ключ
$publicKey = openssl_pkey_get_details($keyResource);

echo $publicKey['key'];
// -----BEGIN PUBLIC KEY-----
// MIIBIjANBgkqhkiG9w0BAQEFAAO...
// ...
// -----END PUBLIC KEY-----

// сохраняем публичный ключ в файл
file_put_contents(
    'php-public-key.pem',
    $publicKey['key']
);
composer require vendor/package

Скачивает и устанавливает пакет, добавляет записи в файлы composer.json и composer.lock.


composer install

Если файла composer.lock ещё нет, то install создаст на основе composer.json новый composer.lock, и дальше скачает и установит зависимости (а так же удалит лишние, если такие есть) по данным из свежего composer.lock.

Если файл composer.lock уже есть, то install скачает и установит зависимости (а так же удалит лишние) по данным из composer.lock, а файл composer.json будет проигнорирован.


composer update

Обновит версии пакетов и обновит файл composer.lock.

Давайте разберёмся с массивами (объектами Array), какие у них есть методы и как ими пользоваться.

Как создать массив

let myArray = [];
// эквивалентно:
myArray = new Array();

Если мы не создавали массив, а получили переменную извне, то нужно проверить является ли она массивом.

А также иногда бывает полезно проверить переменную на существование проверив её тип, чтобы избежать ошибки вроде Uncaught ReferenceError: myArray is not defined:

if (
  typeof myArray === 'object' &&
  Array.isArray(myArray)
) {
  console.log(true);
}

Добавление элементов в массив

Заполнить массив можно при создании:

let myArray = [1, 2, 3];

Либо с помощью метода push:

Страницы