Hello community,
here is the log from the commit of package yast2-packager
checked in at Fri Feb 2 16:11:40 CET 2007.
--------
--- yast2-packager/yast2-packager.changes 2007-01-26 10:42:12.000000000 +0100
+++ /mounts/work_src_done/STABLE/yast2-packager/yast2-packager.changes 2007-01-31 16:46:36.000000000 +0100
@@ -1,0 +2,16 @@
+Wed Jan 31 08:21:05 CET 2007 - lslezak@suse.cz
+
+- inst_source: disable autorefresh for a new ISO image based
+ source (#223585)
+- inst_source: merged "Package Directory" into "Local Directory",
+ added "Local ISO Image" source type (#204943)
+- fixed checkmedia test in the first installation stage (#238670)
+- 2.15.6
+
+-------------------------------------------------------------------
+Fri Jan 26 17:36:13 CET 2007 - lslezak@suse.cz
+
+- inst_source - validate the entered path, added ISO image check
+ (#224797)
+
+-------------------------------------------------------------------
Old:
----
yast2-packager-2.15.5.tar.bz2
New:
----
yast2-packager-2.15.6.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ yast2-packager.spec ++++++
--- /var/tmp/diff_new_pack.OP5829/_old 2007-02-02 16:11:31.000000000 +0100
+++ /var/tmp/diff_new_pack.OP5829/_new 2007-02-02 16:11:31.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package yast2-packager (Version 2.15.5)
+# spec file for package yast2-packager (Version 2.15.6)
#
# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@@ -11,12 +11,12 @@
# norootforbuild
Name: yast2-packager
-Version: 2.15.5
+Version: 2.15.6
Release: 1
License: GNU General Public License (GPL)
Group: System/YaST
BuildRoot: %{_tmppath}/%{name}-%{version}-build
-Source0: yast2-packager-2.15.5.tar.bz2
+Source0: yast2-packager-2.15.6.tar.bz2
prefix: /usr
BuildRequires: docbook-xsl-stylesheets doxygen gcc-c++ libxcrypt-devel libxslt perl-XML-Writer sgml-skel update-desktop-files yast2 yast2-country yast2-devtools yast2-slp yast2-testsuite yast2-xml
Requires: yast2-country
@@ -46,7 +46,7 @@
Arvin Schnell
%prep
-%setup -n yast2-packager-2.15.5
+%setup -n yast2-packager-2.15.6
%build
%{prefix}/bin/y2tool y2autoconf
@@ -84,6 +84,16 @@
%doc %{prefix}/share/doc/packages/yast2-packager
%changelog -n yast2-packager
+* Wed Jan 31 2007 - lslezak@suse.cz
+- inst_source: disable autorefresh for a new ISO image based
+ source (#223585)
+- inst_source: merged "Package Directory" into "Local Directory",
+ added "Local ISO Image" source type (#204943)
+- fixed checkmedia test in the first installation stage (#238670)
+- 2.15.6
+* Fri Jan 26 2007 - lslezak@suse.cz
+- inst_source - validate the entered path, added ISO image check
+ (#224797)
* Fri Jan 26 2007 - lslezak@suse.cz
- removed obsolete module PackageSelectionIO.ycp (reading/writing
of the current package selection is implemented in UI)
++++++ yast2-packager-2.15.5.tar.bz2 -> yast2-packager-2.15.6.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-packager-2.15.5/configure new/yast2-packager-2.15.6/configure
--- old/yast2-packager-2.15.5/configure 2007-01-26 10:36:20.000000000 +0100
+++ new/yast2-packager-2.15.6/configure 2007-01-31 16:44:13.000000000 +0100
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.60 for yast2-packager 2.15.5.
+# Generated by GNU Autoconf 2.60 for yast2-packager 2.15.6.
#
# Report bugs to http://bugs.opensuse.org/.
#
@@ -559,8 +559,8 @@
# Identity of this package.
PACKAGE_NAME='yast2-packager'
PACKAGE_TARNAME='yast2-packager'
-PACKAGE_VERSION='2.15.5'
-PACKAGE_STRING='yast2-packager 2.15.5'
+PACKAGE_VERSION='2.15.6'
+PACKAGE_STRING='yast2-packager 2.15.6'
PACKAGE_BUGREPORT='http://bugs.opensuse.org/'
ac_unique_file="RPMNAME"
@@ -1181,7 +1181,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures yast2-packager 2.15.5 to adapt to many kinds of systems.
+\`configure' configures yast2-packager 2.15.6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1252,7 +1252,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of yast2-packager 2.15.5:";;
+ short | recursive ) echo "Configuration of yast2-packager 2.15.6:";;
esac
cat <<\_ACEOF
@@ -1330,7 +1330,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-yast2-packager configure 2.15.5
+yast2-packager configure 2.15.6
generated by GNU Autoconf 2.60
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1344,7 +1344,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by yast2-packager $as_me 2.15.5, which was
+It was created by yast2-packager $as_me 2.15.6, which was
generated by GNU Autoconf 2.60. Invocation command line was
$ $0 $@
@@ -2145,7 +2145,7 @@
# Define the identity of the package.
PACKAGE='yast2-packager'
- VERSION='2.15.5'
+ VERSION='2.15.6'
cat >>confdefs.h <<_ACEOF
@@ -2372,7 +2372,7 @@
-VERSION="2.15.5"
+VERSION="2.15.6"
RPMNAME="yast2-packager"
MAINTAINER="Ladislav Slezak "
@@ -3260,7 +3260,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by yast2-packager $as_me 2.15.5, which was
+This file was extended by yast2-packager $as_me 2.15.6, which was
generated by GNU Autoconf 2.60. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -3303,7 +3303,7 @@
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-yast2-packager config.status 2.15.5
+yast2-packager config.status 2.15.6
configured by $0, generated by GNU Autoconf 2.60,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-packager-2.15.5/configure.in new/yast2-packager-2.15.6/configure.in
--- old/yast2-packager-2.15.5/configure.in 2007-01-26 10:36:15.000000000 +0100
+++ new/yast2-packager-2.15.6/configure.in 2007-01-31 16:44:07.000000000 +0100
@@ -3,7 +3,7 @@
dnl -- This file is generated by y2autoconf 2.14.0 - DO NOT EDIT! --
dnl (edit configure.in.in instead)
-AC_INIT(yast2-packager, 2.15.5, http://bugs.opensuse.org/, yast2-packager)
+AC_INIT(yast2-packager, 2.15.6, http://bugs.opensuse.org/, yast2-packager)
dnl Check for presence of file 'RPMNAME'
AC_CONFIG_SRCDIR([RPMNAME])
@@ -17,7 +17,7 @@
AM_INIT_AUTOMAKE(tar-ustar) dnl searches for some needed programs
dnl Important YaST2 variables
-VERSION="2.15.5"
+VERSION="2.15.6"
RPMNAME="yast2-packager"
MAINTAINER="Ladislav Slezak "
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-packager-2.15.5/src/clients/inst_source.ycp new/yast2-packager-2.15.6/src/clients/inst_source.ycp
--- old/yast2-packager-2.15.5/src/clients/inst_source.ycp 2006-12-13 14:10:20.000000000 +0100
+++ new/yast2-packager-2.15.6/src/clients/inst_source.ycp 2007-01-31 08:32:09.000000000 +0100
@@ -199,6 +199,15 @@
{
map src_data = Pkg::SourceGeneralData (id);
boolean auto_refresh = src_data["autorefresh"]:false;
+
+ // disable autorefresh for ISO images
+ string src_url = src_data["url"]:"";
+ if (substring(src_url, 0, 3) == "iso")
+ {
+ y2milestone("ISO image detected, disabling autorefresh (%1)", src_url);
+ auto_refresh = false;
+ }
+
map sourceState = $[ "SrcId": id, "enabled": true, "autorefresh" : auto_refresh ];
sourceStatesOut = add( sourceStatesOut, sourceState );
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-packager-2.15.5/src/include/checkmedia/ui.ycp new/yast2-packager-2.15.6/src/include/checkmedia/ui.ycp
--- old/yast2-packager-2.15.5/src/include/checkmedia/ui.ycp 2007-01-25 16:57:27.000000000 +0100
+++ new/yast2-packager-2.15.6/src/include/checkmedia/ui.ycp 2007-01-31 16:44:02.000000000 +0100
@@ -8,7 +8,7 @@
* Authors:
* Ladislav Slezak
*
- * $Id: ui.ycp 35642 2007-01-25 15:57:24Z lslezak $
+ * $Id: ui.ycp 35746 2007-01-31 15:43:57Z lslezak $
*
* All user interface functions.
*
@@ -280,7 +280,8 @@
string req_package = "checkmedia";
- if (!PackageSystem::CheckAndInstallPackagesInteractive([req_package]))
+ if (SCR::Read(.target.size, CheckMedia::checkmedia) < 0 &&
+ !PackageSystem::CheckAndInstallPackagesInteractive([req_package]))
{
return `abort;
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-packager-2.15.5/src/modules/CheckMedia.ycp new/yast2-packager-2.15.6/src/modules/CheckMedia.ycp
--- old/yast2-packager-2.15.5/src/modules/CheckMedia.ycp 2006-10-13 11:12:09.000000000 +0200
+++ new/yast2-packager-2.15.6/src/modules/CheckMedia.ycp 2007-01-31 16:44:02.000000000 +0100
@@ -8,7 +8,7 @@
* Authors:
* Ladislav Slezak
*
- * $Id: CheckMedia.ycp 33383 2006-10-13 09:12:02Z lslezak $
+ * $Id: CheckMedia.ycp 35746 2007-01-31 15:43:57Z lslezak $
*
* Input and output routines.
*
@@ -22,7 +22,7 @@
textdomain "packager";
- string checkmedia = "/usr/bin/checkmedia";
+ global const string checkmedia = "/usr/bin/checkmedia";
list<string> output = [];
integer progress = 0;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-packager-2.15.5/src/modules/SourceDialogs.ycp new/yast2-packager-2.15.6/src/modules/SourceDialogs.ycp
--- old/yast2-packager-2.15.5/src/modules/SourceDialogs.ycp 2006-12-15 13:42:52.000000000 +0100
+++ new/yast2-packager-2.15.6/src/modules/SourceDialogs.ycp 2007-01-31 11:24:47.000000000 +0100
@@ -23,6 +23,8 @@
import "Popup";
import "CWM";
import "SourceManager";
+import "Message";
+import "Report";
// common functions / data
@@ -143,7 +145,7 @@
term PopupButtons() {
return `HBox(
`PushButton( `id( `ok ), `opt( `default ), Label::OKButton() ),
- `HStretch(),
+ `HSpacing(2),
`PushButton( `id( `cancel ), Label::CancelButton() )
);
}
@@ -282,7 +284,6 @@
"help" : _("<p><big><b>NFS Server</b></big><br>
Use <b>Server Name</b> and <b>Path to Directory or ISO Image</b>
to specify the NFS server host name and path on the server.<p>")
-+ iso_help
+ multi_cd_help,
];
}
@@ -343,13 +344,25 @@
* @param key string widget key
*/
void DirInit (string key) {
- boolean iso = IsISOURL (_url);
- if (iso)
- _url = PreprocessISOURL (_url);
map parsed = URL::Parse (_url);
UI::ChangeWidget (`id (`dir), `Value, parsed["path"]:"");
UI::SetFocus (`dir);
+ // is it a plain directory?
+ boolean plain_rpm = (parsed["scheme"]:"" == "pkg");
+ UI::ChangeWidget(`id(`ch_plain), `Value, plain_rpm);
+}
+
+/**
+ * Init function of a widget
+ * @param key string widget key
+ */
+void IsoInit (string key) {
+ _url = PreprocessISOURL(_url);
+ map parsed = URL::Parse(_url);
+
+ UI::ChangeWidget(`id(`dir), `Value, parsed["path"]:"");
+ UI::SetFocus(`dir);
}
/**
@@ -362,14 +375,28 @@
"scheme" : "dir",
"path" : (string)UI::QueryWidget (`id (`dir), `Value),
];
- _url = URL::Build (parsed);
- if (UI::WidgetExists(`id(`ch_iso)))
+ if ((boolean)UI::QueryWidget (`id (`ch_plain), `Value))
{
- boolean iso = (boolean)UI::QueryWidget (`id (`ch_iso), `Value);
- if (iso)
- _url = PosprocessISOURL (_url);
+ parsed["scheme"] = "pkg";
}
+
+ _url = URL::Build (parsed);
+}
+
+/**
+ * Store function of a widget
+ * @param key string widget key
+ * @param event map which caused settings being stored
+ */
+void IsoStore (string key, map event) {
+ map parsed = $[
+ "scheme" : "file",
+ "path" : (string)UI::QueryWidget (`id (`dir), `Value),
+ ];
+
+ _url = URL::Build(parsed);
+ _url = PosprocessISOURL(_url);
}
/**
@@ -379,22 +406,110 @@
* @return always nil
*/
symbol DirHandle (string key, map event) {
- boolean iso = (UI::WidgetExists(`id(`ch_iso))) ?
- (boolean)UI::QueryWidget (`id (`ch_iso), `Value)
- : false;
-
string dir = (string)UI::QueryWidget (`id (`dir), `Value);
- string result = iso
- // dialog caption
- ? UI::AskForExistingFile (dir, "*", _("ISO Image File"))
- // dialog caption
- : UI::AskForExistingDirectory (dir, _("Local Directory"));
- if ( result != nil )
+ // dialog caption
+ string result = UI::AskForExistingDirectory (dir, _("Local Directory"));
+
+ if (result != nil)
+ {
UI::ChangeWidget (`id (`dir), `Value, result);
+ }
+
return nil;
}
/**
+ * Handle function of a widget
+ * @param key string widget key
+ * @param event map which caused settings being stored
+ * @return always nil
+ */
+symbol IsoHandle (string key, map event) {
+ string dir = (string)UI::QueryWidget(`id(`dir), `Value);
+ // dialog caption
+ string result = UI::AskForExistingFile(dir, "*", _("ISO Image File"));
+
+ if (result != nil)
+ {
+ UI::ChangeWidget(`id (`dir), `Value, result);
+ }
+
+ return nil;
+}
+boolean DirValidate(string key, map event) {
+ string s = (string)UI::QueryWidget(`id(`dir), `Value);
+ if (s == nil || s == "")
+ {
+ // error popup
+ Popup::Error(Message::RequiredItem());
+ UI::SetFocus(`id(`dir));
+ return false;
+ }
+
+ map stat = (map)SCR::Read(.target.stat, s);
+
+ y2milestone("stat %1: %2", s, stat);
+
+ if (!stat["isdir"]:false)
+ {
+ // error popup - the entered path is not a directory
+ Report::Error(_("The entered path is not a directory\nor the directory doesn't exist."));
+ UI::SetFocus(`id(`dir));
+
+ return false;
+ }
+
+ return true;
+}
+
+
+boolean IsoValidate(string key, map event) {
+ string s = (string)UI::QueryWidget(`id(`dir), `Value);
+ if (s == nil || s == "")
+ {
+ // error popup
+ Popup::Error(Message::RequiredItem());
+ UI::SetFocus(`id(`dir));
+ return false;
+ }
+
+ map stat = (map)SCR::Read(.target.stat, s);
+
+ y2milestone("stat %1: %2", s, stat);
+
+ if (!stat["isreg"]:false)
+ {
+ // error popup - the entered path is not a regular file
+ Report::Error(_("The entered path is not a file\nor the file doesn't exist."));
+ UI::SetFocus(`id(`dir));
+
+ return false;
+ }
+
+ string file = "/usr/bin/file";
+ // try to detect ISO image by file if it's present
+ if (SCR::Read(.target.size, file) > 0)
+ {
+ string command = file + " -b -i " + s;
+
+ map out = (map)SCR::Execute(.target.bash_output, command);
+
+ string stdout = out["stdout"]:"";
+
+ if (issubstring(stdout, "application/x-iso9660"))
+ {
+ y2milestone("ISO 9660 image detected");
+ }
+ else
+ {
+ // continue/cancel popup, %1 is a file name
+ return Popup::ContinueCancel(sformat(_("File '%1'\ndoesn't seem to be an ISO image.\nUse it anyway?"), s));
+ }
+ }
+
+ return true;
+}
+/**
* Get widget description map
* @return widget description map
*/
@@ -404,7 +519,7 @@
"custom_widget" : `VBox(
`HBox(
// text entry
- `TextEntry (`id (`dir), _("&Path to Directory or ISO Image")),
+ `TextEntry (`id (`dir), _("&Path to Directory")),
`VBox (
`Label (""),
// push button
@@ -412,44 +527,35 @@
)
),
// checkbox label
- `Left (`CheckBox (`id (`ch_iso), _("ISO Image")))
+ `Left (`CheckBox (`id (`ch_plain), _("&Plain RPM Directory")))
),
"init" : DirInit,
"store" : DirStore,
"handle" : DirHandle,
"handle_events" : [ `browse ],
- "help" : _("<p><big><b>Local Directory or ISO</b></big><br>
-Ise <b>Path to Directory or ISO Image</b> to specify the path to the
-directory or the file holding the ISO image of the installation media.</p>")
-+ iso_help
+ "validate_type" : `function,
+ "validate_function" : DirValidate,
+ "help" : _("<p><big><b>Local Directory</b></big><br>
+Use <b>Path to Directory</b> to specify the path to the
+directory. If the directory contains just RPM packages without
+any metadata (i.e. there is no product information) then check option
+<b>Plain RPM Directory</b>.</p>")
+ multi_cd_help,
];
}
/**
- * Store function of a widget
- * @param key string widget key
- * @param event map which caused settings being stored
- */
-void PlainDirStore (string key, map event) {
- map parsed = $[
- "scheme" : "pkg",
- "path" : (string)UI::QueryWidget (`id (`dir), `Value),
- ];
- _url = URL::Build (parsed);
-}
-/**
* Get widget description map
* @return widget description map
*/
-map PlainDirWidget () {
+map IsoWidget () {
return $[
"widget" : `custom,
"custom_widget" : `VBox(
`HBox(
// text entry
- `TextEntry (`id (`dir), _("&Path to Directory")),
+ `TextEntry (`id (`dir), _("&Path to ISO Image")),
`VBox (
`Label (""),
// push button
@@ -457,13 +563,15 @@
)
)
),
- "init" : DirInit,
- "store" : PlainDirStore,
- "handle" : DirHandle,
+ "init" : IsoInit,
+ "store" : IsoStore,
+ "handle" : IsoHandle,
"handle_events" : [ `browse ],
- "help" : _("<p><big><b>Local Directory</b></big><br>
-Use <b>Path to Directory</b> to specify the path to the
-directory holding RPM packages.</p>")
+ "validate_type" : `function,
+ "validate_function" : IsoValidate,
+ "help" : _("<p><big><b>Local ISO Image</b></big><br>
+Use <b>Path to ISO Image</b> to specify the path to the
+ISO image file.</p>")
];
}
@@ -808,7 +916,7 @@
// radio button
`Left (`RadioButton(`id(`local_dir), _("&Local Directory..."))),
// radio button
- `Left (`RadioButton(`id(`pkg), _("&Package Directory..."))), // TODO: Proposal: move the functionality to "Local Directory", move ISO here
+ `Left (`RadioButton(`id(`local_iso), _("&Local ISO Image..."))),
// radio button
`Left (`RadioButton (`id (`specify_url),_("Specify &URL..."))),
`VStretch ()
@@ -827,7 +935,7 @@
// radio button
`Left (`RadioButton(`id(`local_dir), _("&Local Directory..."))),
// radio button
- `Left (`RadioButton(`id(`pkg), _("&Package Directory..."))),
+ `Left (`RadioButton(`id(`local_iso), _("&Local ISO Image..."))),
// radio button
`Left (`RadioButton (`id (`specify_url),_("Specify &URL..."))),
`VStretch ()
@@ -902,7 +1010,7 @@
_url = "";
symbol selected = (symbol)UI::QueryWidget (`id (`type), `CurrentButton);
if (contains ([`ftp, `http, `https, `samba, `nfs, `cd, `dvd,
- `local_dir, `specify__url, `slp, `pkg], selected))
+ `local_dir, `specify__url, `slp, `local_iso], selected))
{
if ( selected == `ftp ) _url = "ftp://";
else if ( selected == `http ) _url = "http://";
@@ -912,7 +1020,7 @@
else if ( selected == `cd ) _url = "cd:///";
else if ( selected == `dvd ) _url = "dvd:///";
else if ( selected == `local_dir ) _url = "dir://";
- else if ( selected == `pkg ) _url = "pkg://"; // hack for local PlainDir source
+ else if ( selected == `local_iso ) _url = "file://";
else if ( selected == `slp ) _url = "slp://";
}
}
@@ -948,8 +1056,8 @@
"cd" : CDWidget (),
"dvd" : CDWidget (),
"dir" : DirWidget (),
- "file" : DirWidget (),
- "pkg" : PlainDirWidget(),
+ "file" : IsoWidget (),
+ "pkg" : DirWidget(),
"http" : ServerWidget (),
"https" : ServerWidget (),
"ftp" : ServerWidget (),
@@ -973,11 +1081,11 @@
// label / dialog caption
"dvd" : _("CD or DVD Media"),
// label / dialog caption
- "dir" : _("Local Directory or ISO"),
+ "dir" : _("Local Directory"),
// label / dialog caption
- "file" : _("Local Directory or ISO"),
+ "file" : _("Local ISO Image"),
// label / dialog caption
- "pkg" : _("Package Directory"),
+ "pkg" : _("Local Directory"),
// label / dialog caption
"http" : _("Server and Directory"),
// label / dialog caption
@@ -1001,8 +1109,9 @@
return `VBox (
`HSpacing (50),
// label
- `Label (_caption[proto]:""),
+ `Heading(_caption[proto]:""),
proto,
+ `VSpacing(0.5),
PopupButtons ()
);
};
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-packager-2.15.5/VERSION new/yast2-packager-2.15.6/VERSION
--- old/yast2-packager-2.15.5/VERSION 2007-01-26 10:35:56.000000000 +0100
+++ new/yast2-packager-2.15.6/VERSION 2007-01-31 16:42:13.000000000 +0100
@@ -1 +1 @@
-2.15.5
+2.15.6
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org